PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
A seguir, são pontos importantes sobre o PostgreSQL desencadeia −
-
o PostgreSQL gatilho pode ser especificado para o fogo
-
Antes de a operação é feita em uma linha (antes de as restrições são verificadas e o INSERT, UPDATE ou DELETE é tentada)
-
Após a conclusão da operação (após as restrições são verificadas e o INSERT, UPDATE ou DELETE foi concluída)
-
em Vez da operação (no caso de inserções, atualizações ou exclusões em um modo de exibição)
-
-
Um gatilho que está marcado PARA CADA LINHA é chamado uma vez para cada linha a operação modifica-se. Em contraste, um gatilho que é marcado para cada instrução só executa uma vez para qualquer operação dada, independentemente de quantas linhas ele modifica.
-
ambos, a cláusula de quando e as acções de desencadeamento, podem aceder aos elementos da linha que está a ser inserida, apagada ou actualizada utilizando referências do formulário novo.nome de coluna e velho.coluna-nome, em que coluna-Nome é o nome de uma coluna do quadro com o qual o gatilho está associado.
-
Se for fornecida uma cláusula quando, as declarações PostgreSQL especificadas só são executadas para linhas para as quais a cláusula quando é verdadeira. Se não for fornecida uma cláusula quando, as instruções PostgreSQL são executadas para todas as linhas.
-
Se múltiplos gatilhos do mesmo tipo forem definidos para o mesmo evento, eles serão disparados por ordem alfabética pelo nome.
-
O Antes, Depois ou em vez de palavra-chave determina quando as acções de activação serão executadas em relação à inserção, modificação ou remoção da linha associada.
-
os gatilhos são automaticamente retirados quando a tabela a que estão associados é retirada.
-
a tabela a ser modificada deve existir na mesma base de dados que a tabela ou vista à qual o gatilho Está ligado e deve-se usar apenas o nome de tabela, não a base de dados.tabela.
-
uma opção de restrição, quando especificada, cria uma alavanca de restrições. Este é o mesmo que um gatilho regular, exceto que o tempo de disparo do gatilho pode ser ajustado usando restrições SET. Espera-se que os gatilhos de restrições levantem uma exceção quando as restrições que implementam são violadas.
sintaxe
a sintaxe básica de criar um gatilho é a seguinte −
CREATE TRIGGER trigger_name event_nameON table_name;
Aqui, o nome do evento pode ser inserido, apagar, actualizar e truncar a operação da base de dados no table_name mencionado na tabela. Você pode opcionalmente especificar para cada linha após o nome da tabela.
a seguir está A sintaxe de criação de uma trigger em uma operação de ATUALIZAÇÃO em uma ou mais colunas especificadas de uma tabela como a seguinte:
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
Exemplo
Vamos considerar um caso onde queremos continuar a auditoria de avaliação para cada registro a ser inserido na tabela de EMPRESA, que nós vamos criar recém-se da seguinte forma (Queda de EMPRESA tabela se você já tiver).
testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);
Para manter auditoria de avaliação, vamos criar uma nova tabela denominada de AUDITORIA onde o log de mensagens irá ser inserido sempre que houver uma entrada na tabela de EMPRESA para um novo recorde
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
Aqui, ID é o registro de AUDITORIA de IDENTIFICAÇÃO, e ID_EMP é a IDENTIFICAÇÃO, que virão a partir da tabela de EMPRESA e a DATA de manter o carimbo de data / hora quando o registro será criado na tabela de EMPRESA. Então, agora, vamos criar um gatilho na tabela da EMPRESA como segue:
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
Onde auditlogfunc() o PostgreSQL é um processo e tem a seguinte definição
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;
Agora, vamos iniciar o trabalho real. Vamos começar a inserir registro na tabela de empresa que deve resultar na criação de um registro de auditoria na tabela de auditoria. Por isso, vamos criar um registro na tabela de EMPRESA como segue:
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
Isto irá criar um registo na tabela de EMPRESA, que é como segue:
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
Mesmo tempo, um registro será criado na tabela de AUDITORIA. Este registro é o resultado de um gatilho, que criamos na operação inserir na mesa da empresa. Da mesma forma, você pode criar seus gatilhos em operações de atualização e exclusão com base em seus requisitos.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
listar os gatilhos
Pode listar todos os gatilhos na base de dados actual a partir da tabela PG_ Trigger como se segue −
testdb=# SELECT * FROM pg_trigger;
a declaração PostgreSQL acima indicada irá listar todos os gatilhos.
Se você deseja listar os disparadores em uma determinada tabela e, em seguida, usar E cláusula com o nome da tabela como segue:
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
O acima determinado PostgreSQL declaração também a lista de apenas uma entrada como a seguinte:
tgname----------------- example_trigger(1 row)
Soltando DISPARA
A seguir está o comando de menu, que pode ser utilizada para a colocação de um disparador existente −
testdb=# DROP TRIGGER trigger_name;