Re: tablename type? - Mailing list pgsql-general

From Tom Lane
Subject Re: tablename type?
Date
Msg-id 23441.1091032646@sss.pgh.pa.us
Whole thread Raw
In response to Re: tablename type?  (des@des.no (Dag-Erling Smørgrav))
List pgsql-general
des@des.no (=?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?=) writes:
> Tom Lane <tgl@sss.pgh.pa.us> writes:
>> des@des.no (=?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?=) writes:
>>> ERROR:  type tablename does not exist
>> The example is just an example.  Create an actual table and use its
>> name.

> If you read the example, you will see that the function is clearly
> intended to operate on a table whose name is specified as a parameter
> to the function, and that "tablename" is used as the type name for
> that parameter, and not a placeholder for an actual table name.

No, it's you who are misunderstanding.  The example is showing use of a
composite-type parameter (ie, a row value).  Perhaps fleshing out the
example will make it clearer:

regression=# create table tablename(f1 text, f3 text, f5 text, f7 text);
CREATE TABLE
regression=# insert into tablename values('a','b','c','d');
INSERT 577890 1
regression=# CREATE FUNCTION concat_selected_fields(tablename) RETURNS text AS '
regression'# DECLARE
regression'#   in_t ALIAS FOR $1;
regression'# BEGIN
regression'#   RETURN in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7;
regression'# END;
regression'# ' LANGUAGE plpgsql;
CREATE FUNCTION
regression=# select * from tablename t;
 f1 | f3 | f5 | f7
----+----+----+----
 a  | b  | c  | d
(1 row)

regression=# select concat_selected_fields(t.*) from tablename t;
 concat_selected_fields
------------------------
 abcd
(1 row)

            regards, tom lane

pgsql-general by date:

Previous
From: Chris Browne
Date:
Subject: Re: NNTP server
Next
From: Chris Gamache
Date:
Subject: Tsearch2 dump/reload problem