Я использую версию postgres: PostgreSQL 9.2.4 на x86_64-unknown-linux-gnu, скомпилированный gcc (Debian 4.7.2-5) 4.7.2, 64-битногоне может вставлять строку в таблицу при переадресации данных из родительской таблицы в дочернюю таблицу в триггере (хранимая процедура)
Описание:
у меня есть один родительская таблица и что родительская таблица имеет множество дочерних таблиц. Я хочу, чтобы перенаправить данные из родительской таблицы для дочерней таблицы (в то время как вставки)
(такой же, как по этой ссылке: Example Link) (например, мороженого компании)
я следующие вещи ...
create table tsttbl1 (id integer, name text);
create table tsttbl1_hour0 (LIKE tsttbl1) INHERITS (tsttbl1);
CREATE OR REPLACE FUNCTION insert_tsttbl1_hourbase() RETURNS TRIGGER AS $$
BEGIN
RAISE NOTICE 'Hi...%', NEW;
execute 'INSERT INTO ' || TG_TABLE_SCHEMA|| '.tsttbl1_hour0 values '|| NEW;
-- INSERT INTO tsttbl1_hour0 values (NEW.*)';
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
create trigger trigger_insert_tsttbl1_hourbase before insert on tsttbl1 FOR EACH ROW EXECUTE PROCEDURE insert_tsttbl1_hourbase();
Здесь
родительская таблица: - tsttbl1
ребенок стол: - tsttable1_hour0
Пытается достичь: insert into tsttbl1 (id, name) values (0,'xyz');
следует вставить данные в tsttable1_hour0 вместо tsttbl1;
Но когда я попытался вставить строку, я получаю как это ...
ccc=# insert into tsttbl1 (id,name) values (1, 'abc');
LOG: statement: insert into tsttbl1 (id,name) values (1, 'abc');
NOTICE: Hi...(1,abc)
ERROR: column "abc" does not exist
LINE 1: INSERT INTO act1.tsttbl1_hour0 values (1,abc)
^
QUERY: INSERT INTO act1.tsttbl1_hour0 values (1,abc)
CONTEXT: PL/pgSQL function insert_tsttbl1_hourbase() line 4 at EXECUTE statement
Дополнительная информация:
-> Это перенаправление данных также может быть достигнуто за счет правила. Но для моего случая эта вставка часто, поэтому правило может быть дорогостоящим сравнением с триггером ...
, так что я хочу достичь этого триггером.
-> если я ип комментарий линия "INSERT INTO значений tsttbl1_hour0 '(NEW *.)" .. строка вставляется успешно
-> если я ип комментарий линия "ВСТАВИТЬ INTO tsttbl1_hour0 значений (NEW.id, NEW.name) '».. строка вставляется успешно
спасибо ronin ... но проблема в моей таблице имеет 50 столбцов ... поэтому я не могу пойти с «New.id», «New.name» ... это возможно с New. * ??? –
Я решил проблему .... :) спасибо за ответ –