Re: Concatenate table name in Pl/Pgsql

Поиск
Список
Период
Сортировка
От Adarsh Sharma
Тема Re: Concatenate table name in Pl/Pgsql
Дата
Msg-id CAGx-Qq+jJ2fK_X8QCRzYtf-DTJ2NpH+DALqzOBG6kAREmWb+KQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Concatenate table name in Pl/Pgsql  (Ian Lawrence Barwick <barwick@gmail.com>)
Ответы Re: Concatenate table name in Pl/Pgsql  (Ian Lawrence Barwick <barwick@gmail.com>)
Список pgsql-general
Thanks Ian for such a quick response. But my NEW.* will be 10-15 columns row.

test=# CREATE OR REPLACE FUNCTION tmp_trigger_function()
test-# RETURNS TRIGGER AS $$
test$# DECLARE
test$# stmt text;
test$# abc varchar;
test$# BEGIN
test$# select to_char(NEW.a::timestamp,'yyyymmdd') into abc ;
test$# stmt := 'insert into ' || tmp || abc || ' VALUES ($1)'
test$# EXECUTE stmt USING NEW.*;
test$# RETURN NULL;
test$# END;
test$# $$
test-# LANGUAGE plpgsql;
ERROR:  syntax error at or near "EXECUTE"
LINE 9: EXECUTE stmt USING NEW.*;
        ^
Time: 0.737 ms
test=#


Thanks


On Wed, Jun 26, 2013 at 10:52 AM, Ian Lawrence Barwick <barwick@gmail.com> wrote:
2013/6/26 Adarsh Sharma <eddy.adarsh@gmail.com>:
> Hi ,
>
> Today i m creating a function that includes dynamic concatenation of a
> partitioned table name as below :-
>
> test=# CREATE OR REPLACE FUNCTION tmp_trigger_function()
> test-# RETURNS TRIGGER AS $$
> test$# DECLARE
> test$# tbl_name text;
> test$# abc varchar;
> test$# BEGIN
> test$# tbl_name := 'tmp';
> test$# select to_char(NEW.a::timestamp,'yyyymmdd') into abc ;
> test$# insert into tmp || abc values ( NEW.* );
> test$# RETURN NULL;
> test$# END;
> test$# $$
> test-# LANGUAGE plpgsql;
> ERROR:  syntax error at or near "||"
> LINE 9: insert into tmp || abc values ( NEW.* );
>                         ^
> Time: 0.901 ms
> test=#
> test=#
>
> I tried with a statement variable also. Any ideas ?

You'll need to create a string and use EXECUTE, something along the lines of:

stmt := 'insert into ' || tmp || abc || ' VALUES ($1)'
EXECUTE stmt USING NEW.*;

http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

HTH

Ian Barwick

В списке pgsql-general по дате отправления:

Предыдущее
От: Ian Lawrence Barwick
Дата:
Сообщение: Re: Concatenate table name in Pl/Pgsql
Следующее
От: Amit Langote
Дата:
Сообщение: Re: Archiving and recovering pg_stat_tmp