Re: tablename type?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: des(at)des(dot)no (=?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?=)
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: tablename type?
Date: 2004-07-28 16:37:26
Message-ID: 23441.1091032646@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

des(at)des(dot)no (=?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?=) writes:
> Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> writes:
>> des(at)des(dot)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

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Chris Gamache 2004-07-28 16:42:38 Tsearch2 dump/reload problem
Previous Message Scott Marlowe 2004-07-28 16:08:32 Re: altering a table to set serial function