Question

I'm trying to use a FOR loop:

create or replace function update_revisions() returns trigger as 
$$ 
begin 
    declare col_name declare col_name information_schema.columns%ROWTYPE; 

    for col_name in
       select column_name from information_schema.columns
       where table_name='t'
    loop 
        insert into debug_table values (col_name); 
    end loop;
end;
$$
language plpgsql; 

But it always says:

syntax error at or near 'for'

Could someone please give me a hint what's wrong with it?

Was it helpful?

Solution

Immediate problem

Invalid syntax. Untangled:

create or replace function update_revisions()
  returns trigger as 
$$ 
declare
   col_name information_schema.columns%ROWTYPE; 
begin 
   for col_name in
      select column_name from information_schema.columns
      where table_name='t'
   loop 
      insert into debug_table values (col_name); 
    end loop;
end;
$$  language plpgsql;

More problems

  • Table names are not unique in a Postgres database. More in this recent answer:
    Behaviour of NOT LIKE with NULL values

  • The whole approach is inefficient. Use a single INSERT statement instead:

INSERT INTO debug_table (target_column)  -- with column definition list!
SELECT column_name
FROM   information_schema.columns
WHERE  table_name = 't'
AND    table_schema = 'public';          -- your schema
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top