1

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?

2

1 Answer 1

3

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
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, it works now. I'll look into the non-unique table names. The insert statement is just there for debugging purposes, not the actual production code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.