Re: Where - Mailing list pgsql-general

From Bob Pawley
Subject Re: Where
Date
Msg-id 004f01c5e6eb$b0956150$ac1d4318@OWNER
Whole thread Raw
In response to Where  (Bob Pawley <rjpawley@shaw.ca>)
List pgsql-general
Uwe

In attempting to understand the underlying intent of the statement, I have a
question.

What purpose does the statement "myrow" serve in this expression.

Bob

----- Original Message -----
From: "Uwe C. Schroeder" <uwe@oss4u.com>
To: "Bob Pawley" <rjpawley@shaw.ca>
Cc: <pgsql-general@postgresql.org>
Sent: Thursday, November 10, 2005 5:05 PM
Subject: Re: [GENERAL] Where


>
>
> This will work if you can guarantee that it's only one record
>
> INSERT INTO pipe (fluid_id,contain) SELECT (fluid_id,contain) FROM process
> WHERE contain='ip'
>
> otherwise (more than one record) you have to loop over the resultset,
> something like (off the top of my head)
>
> create or replace function base() returns trigger as $$
> DECLARE
>  myrow RECORD;
> BEGIN
>    insert into pipe (fluid_id) values (new.fluid_id);
>    for myrow in select * from process where contain = 'ip' loop
>         insert into pipe(fluid_id,contain) values
> (row.fluid_id,row.contain);
>         if not found then
>            raise exception 'error creating record';
>        end if;
>    end loop;
>    return NULL;
> END;
>
>
>
>
> On Thursday 10 November 2005 15:56, Bob Pawley wrote:
>> Thank you - what is the correct command???
>>
>> Bob
>>
>> ----- Original Message -----
>> From: "Uwe C. Schroeder" <uwe@oss4u.com>
>> To: <pgsql-general@postgresql.org>
>> Cc: "Bob Pawley" <rjpawley@shaw.ca>
>> Sent: Thursday, November 10, 2005 3:34 PM
>> Subject: Re: [GENERAL] Where
>>
>> > SELECT INTO xxxx
>> > tries to create table xxxx
>> > See: http://www.postgresql.org/docs/8.0/interactive/sql-selectinto.html
>> >
>> > Why do you do the select into anyways? It does nothing.
>> > If you try to update table pipe with the select result you have the
>> > wrong
>> > command.
>> >
>> > UC
>> >
>> > On Thursday 10 November 2005 14:24, Bob Pawley wrote:
>> >> I am attempting to transfer the data in the fluid_id column of table
>> >> process into column fluid_id of table pipe.
>> >>
>> >> This should happen only when column contain of table process holds the
>> >> value 'ip'.
>> >>
>> >> Here is the command that I am having trouble with.
>> >> -------
>> >> create table process (fluid_id integer primary key, process varchar,
>> >> contain varchar);
>> >>
>> >> create table pipe ( fluid_id integer not null, contain varchar);
>> >>
>> >>
>> >>
>> >> create or replace function base() returns trigger as $$
>> >>
>> >>             begin
>> >>
>> >>
>> >>
>> >>             insert into pipe (fluid_id) values (new.fluid_id);
>> >>
>> >>             select * into pipe from process where contain = 'ip';
>> >>
>> >>
>> >>
>> >>             return null;
>> >>
>> >>
>> >>
>> >>             end;
>> >>
>> >>             $$ language plpgsql;
>> >>
>> >>
>> >>
>> >>             create trigger trig1 after insert on process
>> >>
>> >>
>> >>
>> >>             for each row execute procedure base();
>> >>
>> >>
>> >>
>> >>     insert into process (fluid_id, process, contain)
>> >>
>> >>             values ('2', 'water', 'ip');
>> >>
>> >> -------------------
>> >> On inserting data this error comes back -
>> >> -------
>> >> ERROR:  relation "pipe" already exists
>> >> CONTEXT:  SQL statement "SELECT  * INTO  pipe from process where
>> >> contain
>> >> =
>> >> 'ip'" PL/pgSQL function "base" line 4 at SQL statement
>> >> ------
>> >> Of course the table pipe does already exist - it is a permanent table.
>> >>
>> >> Is the program looking for some other target??  Perhaps a temporary
>> >> table??
>> >>
>> >>
>> >>
>> >> Or am I completely screwed up???
>> >>
>> >>
>> >>
>> >> Bob
>> >
>> > --
>> > UC
>> >
>> > --
>> > Open Source Solutions 4U, LLC 2570 Fleetwood Drive
>> > Phone:  +1 650 872 2425 San Bruno, CA 94066
>> > Cell:   +1 650 302 2405 United States
>> > Fax:    +1 650 872 2417
>
> --
> UC
>
> --
> Open Source Solutions 4U, LLC 2570 Fleetwood Drive
> Phone:  +1 650 872 2425 San Bruno, CA 94066
> Cell:   +1 650 302 2405 United States
> Fax:    +1 650 872 2417


pgsql-general by date:

Previous
From: "Carlos Oliva"
Date:
Subject: Re: Performance of autovacuum and full vacuum of database
Next
From: Johnny Ljunggren
Date:
Subject: Choosing PostgreSQL as the database for our next project