Re: dynamic insert in plpgsql - Mailing list pgsql-general

From Grzegorz Jaśkiewicz
Subject Re: dynamic insert in plpgsql
Date
Msg-id 2f4958ff1001091704ra796d0ch92d415180a3a4fbb@mail.gmail.com
Whole thread Raw
In response to Re: dynamic insert in plpgsql  (Merlin Moncure <mmoncure@gmail.com>)
List 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 by date:

Previous
From: Greg Smith
Date:
Subject: Re: Gentoo, 8,2 ---> 8.4, and /var/run/postgresql in mode 770
Next
From: Ivan Sergio Borgonovo
Date:
Subject: aggregate over tables in different schema