8
votes

Enregistrement de séparation renvoyé de la fonction dans Postgres

J'ai une fonction qui renvoie deux paramètres en tant que type composite anonyme via Paramètres de sortie .

Je peux accéder aux colonnes individuelles avec une requête comme celle-ci: P>

 firstname | lastname  |  guess_user   
-----------+-----------+---------------
 Angela    | Abbott    | (0.285714,3)
 Amy       | Allan     | (0.285714,4)
 Annette   | Allison   | (0.285714,5)
 Annie     | Ashworth  | (0.285714,6)
 Amanda    | Baird     | (0.285714,7)


2 commentaires

Au cas où il est utile que quiconque souhaitait expérimenter, voici une fonction qui retournera le même type d'enregistrement que celui que j'utilise: Créer ou remplacer la fonction GUESSE_USER (FirstName Varchar, LateName Varchar, Out Confidence Real, Out MatchID Integer) $ Commencer matchid: = 1; confiance: = 0.5; REVENIR; FINIR; $$ langue plpgsql;


Serait-il possible de mettre en œuvre cela comme une vue à la place? développeur.postgresql.org/pgdocs/postgres/sql-creeview.htmlled/a >


5 Réponses :



0
votes

Sauf si quelqu'un ne me ferme pas et me corrige, je pense que la réponse est que ce n'est actuellement pas possible dans 8.3 mais peut être fait à Postgres 8.4.

http://www.depesz.com/index.php/2008/11/03/waitting-for-84-pl-srf-fonctions-in-selects/


0 commentaires

2
votes

Faites-le simplement comme ça:

select firstname, lastname, x.confidence, x.matchid
from 
(
select firstname, lastname, guess_user(firstname, lastname) as x
from users
limit 5
) q;


1 commentaires

Vous devez utiliser des parenthèses pour accéder aux champs de type composite: Sélectionnez FirstName, Nom, (x) .Confidence, (x) .Matchid Sinon, obtenez cette erreur: «Entrée de clause manquante pour la table" x ""



0
votes

Vous devrez peut-être entre parenthésiser la solution de «X» dans Depesz, afin de distinguer la valeur d'enregistrement composite d'une table, de sorte que vous n'obtenez pas le message: xxx

au moins je fais sur 9.0.2.


0 commentaires

13
votes

Combinant les réponses de Depesz et Fazal Cela semble fonctionner:

select firstname, lastname, (guess_user(firstname, lastname)).*
from users
limit 5


1 commentaires

Pour ajouter un peu plus d'informations, par postgreSQL.org/docs/9.3/static/ ROWTYPES.HTML "Pour accéder à un champ d'une colonne composite, on écrit un point et le nom de champ, tout comme la sélection d'un champ à partir d'un nom de table. En fait, c'est tellement comme la sélection d'un nom de table que vous avez doivent souvent utiliser des parenthèses à empêcher de dérouler l'analyseur. "