PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres insere na regra de exibição com cláusula de retorno


Você está muito melhor usando um INSTEAD OF INSERT acionar aqui:
CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
  id integer;
BEGIN
  INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
  INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
  RETURN NEW;
END; $$ LANGUAGE PLPGSQL;

CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
  FOR EACH ROW EXECUTE PROCEDURE MyFuncName();

Verificar o valor atual de uma sequência para ver o que foi inserido em outra tabela é ruim ruim ruim prática. Mesmo enquanto estiver aqui em uma única transação, não faça isso.

Você está confuso sobre o problema de RETURNING informações, porque também estou confuso quando leio sua pergunta. Dentro de uma função use o INTO cláusula para preencher variáveis ​​declaradas localmente para armazenar valores de registro que você pode usar em instruções subsequentes. Fora de uma função, use o RETURNING cláusula como você faz em seu snippet de código mais alto.