Tengo una tabla llamada premios. ¿Cómo puedo montar un disparador en PostgreSQL donde cada inserción en la tabla otorga actualizaciones a una tabla diferente?Insertar activador para actualizar otra tabla usando PostgreSQL
Respuesta
Quiere el documenation for PL/PgSQL triggers, que trata sobre este caso, entre otros. El general documentation on triggers también puede ser útil.
Puede utilizar un disparador BEFORE
o AFTER
para esto. Probablemente usaría un disparador AFTER
para que mi desencadenador viera la versión final de la fila que se está insertando. Quiere FOR EACH ROW
, por supuesto.
Hola @Craig Ringer es el propósito de FOR EACH ROW para inserciones por lotes? – rosenthal
@rosenthal Huh? Los activadores 'PARA CADA DECLARACIÓN' no tienen acceso a la fila' NUEVO'. Así que incluso si estuvieras haciendo una sola fila 'INSERT ', no sería útil para esto. –
No quise decir eso, disculpe mi pobre elección de palabras. Quiero decir, ¿qué es EL PARA CADA FILA? Miré la documentación de Postgres y lo entendí ahora. "Un activador que está marcado PARA CADA FILA se llama una vez por cada fila que modifica la operación". – rosenthal
Haga clic en el siguiente enlace y obtendrá la respuesta.
http://www.postgresql.org/docs/9.4/static/plpgsql-trigger.html
Aquí tenemos dos tablas denominadas table1
y table2
. Usando un gatillo, actualizaré table2
al insertarlo en table1
.
Crear las tablas
CREATE TABLE table1
(
id integer NOT NULL,
name character varying,
CONSTRAINT table1_pkey PRIMARY KEY (id)
)
CREATE TABLE table2
(
id integer NOT NULL,
name character varying
)
La función de disparo
CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS
$BODY$
BEGIN
INSERT INTO
table2(id,name)
VALUES(new.id,new.name);
RETURN new;
END;
$BODY$
language plpgsql;
El disparador
CREATE TRIGGER trig_copy
AFTER INSERT ON table1
FOR EACH ROW
EXECUTE PROCEDURE function_copy();
En el disparador ¿Funciona cómo sabe esto para insertar valores de la tabla uno? ¿No necesitamos escribir "desde la tabla 1" después de "valores (new.id, new.name)"? –
- 1. Activador Insertar SQL para actualizar valores de tabla INSERTED
- 2. PostgreSQL: insertar desde otra tabla
- 3. Actualizar/Insertar en una tabla usando SQLCeResultSet
- 4. MySql Insertar tabla si no existe otra manera actualizar
- 5. ¿Cómo usar la activación de actualización para actualizar otra tabla?
- 6. Actualizar filas de otra tabla
- 7. Actualizar tabla basada en otra tabla
- 8. Usando ContentProviderOperation para actualizar e insertar contactos
- 9. Actualizar tabla usando SSIS
- 10. ¿Insertar/actualizar lote usando Mongoid?
- 11. Disparador para insertar, actualizar, eliminar
- 12. consulta PostgreSQL para actualizar los campos usando una expresión regular
- 13. Comprobar si la tabla hereda de otra tabla en PostgreSQL
- 14. Disparador para INSERTAR y ACTUALIZAR en la misma tabla
- 15. ¿Cómo puedo escribir un activador de actualización para actualizar la tabla actual en función de un valor en otra tabla en SQL Server 2008?
- 16. mysql :: insertar en la tabla, datos de otra tabla?
- 17. SQL - Actualizar una tabla con un campo de otra tabla
- 18. función Insertar/actualizar ayudante usando DOP
- 19. Actualizar tabla mysql con datos de otra tabla
- 20. granel actualizar una tabla de filas de otra tabla
- 21. SQL Actualizar una tabla según las condiciones en otra tabla
- 22. Uso de SQLBulkCopy para insertar/actualizar la base de datos
- 23. Actualizar tabla de base de datos PostgreSQL MUY GRANDE eficientemente
- 24. Tabla de actualización Django usando datos de otra tabla
- 25. T-SQL Insertar o actualizar
- 26. MySQL Fire Trigger para insertar y actualizar
- 27. PHP MYSQL Insertar/Actualizar
- 28. Insertar fila en la tabla para cada identificación en otra tabla
- 29. Seleccione de la misma tabla que Insertar o Actualizar
- 30. insertar o actualizar si el registro está en la tabla
Podría dar algunos mor e detalles? Es esta "tabla diferente" una tabla única, separada, o tablas múltiples basadas en algún valor de algún campo en premios. – jcater
http://www.postgresql.org/docs/8.1/static/triggers.html – ertx
@ertx Es mejor vincular al/current/doc en lugar del /8.1/ doc, esto es * extremadamente * desactualizado. –