Re: dynamic insert in plpgsql
От | Grzegorz Jaśkiewicz |
---|---|
Тема | Re: dynamic insert in plpgsql |
Дата | |
Msg-id | 2f4958ff1001091704ra796d0ch92d415180a3a4fbb@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: dynamic insert in plpgsql (Merlin Moncure <mmoncure@gmail.com>) |
Список | pgsql-general |
This is what I hacked quickly last night, what you guys think? CREATE OR REPLACE FUNCTION something.ziew_partition_insert() RETURNS TRIGGER AS $_$ DECLARE partition_table_name varchar; old_partition_table_name varchar; BEGIN SELECT 'something_partitions.ziew_'||to_char(NEW.logtime, 'IYYY_MM') INTO partition_table_name; BEGIN EXECUTE 'INSERT INTO '||partition_table_name||' (SELECT (something.ziew '||quote_literal(NEW)||').*)'; EXCEPTION WHEN undefined_table THEN BEGIN SET client_min_messages = error; EXECUTE 'CREATE TABLE '||partition_table_name||'() INHERITS (something.ziew)'; EXECUTE 'ALTER TABLE '||partition_table_name||' ADD PRIMARY KEY (id)'; EXECUTE 'CREATE INDEX something_time'|| to_char(NEW.logtime, 'IYYY_MM')||' ON '||partition_table_name||'(logtime)'; SELECT 'something_partitions.ziew_'||to_char(NEW.logtime-'2 months'::interval, 'IYYY_MM') INTO old_partition_table_name; -- don't care if it fails BEGIN EXECUTE 'DROP TABLE '||old_partition_table_name; EXCEPTION WHEN others THEN --- in place for NOP old_partition_table_name := ''; END; EXECUTE 'INSERT INTO '||partition_table_name||' (SELECT (something.ziew '||quote_literal(NEW)||').*)'; EXCEPTION WHEN others THEN RAISE EXCEPTION 'somethings wrong %',SQLERRM; RETURN NULL; END; END; RETURN NULL; END; $_$ LANGUAGE 'plpgsql';
В списке pgsql-general по дате отправления: