sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo alterar las REFERENCIAS en PostgreSQL?

Las dependencias internas entre tablas y/u otros objetos nunca están vinculadas al nombre del objeto. Internamente, cada objeto se almacena en una tabla de catálogo y el OID (clave primaria interna) del objeto se usa para todo más.

En consecuencia, una FOREIGN KEY la referencia se almacena en las tablas del catálogo pg_constraint (la propia restricción incluye su nombre) y pg_depend . Cambiar los nombres de las tablas no afectará la funcionalidad en absoluto .

El nombre de la restricción permanece sin cambios. Puede ignorar eso, o puede cambiar el nombre de la restricción para que no sea engañosa.

Sin embargo, dado que no especificó un nombre de restricción en el momento de la creación, el sistema eligió un valor predeterminado, que es example2_example1fk_fkey en su caso a menos que el nombre haya sido tomado. No hay referencia a la tabla a la que se hace referencia nombre. Pero el nombre de la columna probablemente también tendrá que cambiar en su ejemplo. Y eso se utiliza en el nombre de la restricción.

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

En Postgres 9.2 o posterior, también puede cambiar el nombre de la restricción (como dequis comentado ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

En versiones anteriores, debe eliminar y volver a crear la restricción para cambiarle el nombre, mejor en una sola declaración:

ALTER TABLE example2  -- rename constraint
   DROP CONSTRAINT example2_example1fk_fkey
 , ADD  CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
      REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Detalles en el manual.