Триггер PostgreSQL Копировать новую строку в другую таблицу - PullRequest
0 голосов
/ 15 мая 2018

У меня есть проблема, в которой я застрял на некоторое время. Поэтому я хотел протянуть руку помощи.

У меня есть 2 таблицы с одинаковыми данными: транзакции и транзакции2.

Я хочу написать Триггер, который запускается каждый раз, когда в транзакции добавляется новая строка, и вставлять ее в транзакцию 2 в PLSQL.

Сначала я просто продублировал таблицу с

CREATE TABLE transactions2 (SELECT * FROM transactions WHERE 1=1);

Кажется, я узнал, как вставить

CREATE OR REPLACE FUNCTION copyRow RETURNS TRIGGER AS $$ DECLARE BEGIN INSERT INTO transaction2 VALUES transaction; END;

Я думаю, что синтаксис с этим также неверен, но как мне сказать, что триггер должен запускаться, как только будет произведена новая вставка в первую таблицу?

Может кто-нибудь помочь мне с этим?

Спасибо Бобби

1 Ответ

0 голосов
/ 15 мая 2018

Правильный синтаксис для INSERT: INSERT (<column list>) VALUES (<values list>).Синтаксис INSERT не отличается в функции по сравнению с «снаружи».Таким образом, ваша триггерная функция должна выглядеть примерно так:

CREATE OR REPLACE FUNCTION t2t2_f ()
RETURNS TRIGGER
AS
$$
BEGIN
  INSERT INTO transactions2
              (column_1,
               ...,
               column_n)
              VALUES (NEW.column_1,
                      ...,
                      NEW.column_n);

  RETURN NEW;
END;
$$
LANGUAGE plpgsql;

Замените column_i s фактическими именами столбцов вашей таблицы.NEW - это псевдозапись, с помощью которой вы можете получить доступ к значениям новой строки.

Чтобы создать сам триггер, используйте что-то вроде:

CREATE TRIGGER t2t2_t
       AFTER INSERT
       ON transactions
       FOR EACH ROW
       EXECUTE PROCEDURE t2t2_f();

Возможно, вы захотите использовать другое времяНапример, BEFORE вместо AFTER.

Это должно дать вам кое-что для начала.Пожалуйста, изучите подробное Руководство PostgreSQL для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...