2010-06-09 10 views
41

Parece que no puedo hacerlo bien, estoy tratando de modificar un campo para que sea una clave externa, con eliminación en cascada ... ¿qué estoy haciendo mal?Restricción de Postgresql

ALTER TABLE my_table 
ADD CONSTRAINT $4 
FOREIGN KEY my_field 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 

Respuesta

76

Sería de gran ayuda si usted envió el mensaje de error. Pero creo que simplemente se echa en falta el paréntesis:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 
+1

@Magnus Hagander, ¿por qué es el 'de supresión en cascada' útil? No lo entiendo ... –

+4

@Stephane Vea la respuesta aceptada a [esta pregunta] (http://stackoverflow.com/questions/14141266/postgresql-foreign-key-on-delete-cascade) "_Una clave externa con una eliminación en cascada significa que si se elimina un registro en la tabla principal, se eliminarán automáticamente los registros correspondientes en la tabla secundaria. Esto se denomina eliminación en cascada._ "Parece algo que no desea incluir automáticamente a menos que Querías unir las tablas en lugar de simplemente crear una referencia. –

+0

@RichardD, cuando no lo incluye, debe utilizar la palabra clave CASCADE con la consulta, y recuerda las consecuencias, entonces :) – Line

12

Solo adivinando: ¿no debería agregar una clave externa en lugar de una restricción?

ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table; 

Postgresql reference

+12

una clave externa * * es una restricción ... –

12

estoy de alguna manera todavía falta aquí una respuesta con la columna externa (foreign_field) especifica explícitamente:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table (foreign_field) 
ON DELETE CASCADE; 
1

Esto funciona para mí, agrego el columna a la tabla y luego añadir la restricción de referencias a la otra tabla:

-- add column to table 
ALTER TABLE schema.table ADD COLUMN my_column type; 

-- add constraint to column 
ALTER TABLE schema.table ADD CONSTRAINT fk_name FOREIGN KEY (column) 
REFERENCES schema.table (column) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE NO ACTION; 
Cuestiones relacionadas