A continuación, la estructura de la tabla de ejemplo proporciona un ERROR: no existe una restricción única que coincida con las claves para la tabla referenciada, y al haberla observado no puedo entender por qué surge este error en esta situación.¿Qué está causando ERROR: no hay una restricción única que coincida con las claves dadas para la tabla a la que se hace referencia?
BEGIN;
CREATE TABLE foo (
name VARCHAR(256) PRIMARY KEY
);
CREATE TABLE bar(
pkey SERIAL PRIMARY KEY,
foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name),
name VARCHAR(256) NOT NULL,
UNIQUE (foo_fk,name)
);
CREATE TABLE baz(
pkey SERIAL PRIMARY KEY,
bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name),
name VARCHAR(256)
);
COMMIT;
ejecutar el código anterior muestra el siguiente error, lo que no tiene sentido para mí, ¿alguien puede explicar por qué surge este error. Estoy utilizando Postgres 9.1
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
NOTICE: CREATE TABLE will create implicit sequence "bar_pkey_seq" for serial column "bar.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "bar_pkey" for table "bar"
NOTICE: CREATE TABLE/UNIQUE will create implicit index "bar_foo_fk_name_key" for table "bar"
NOTICE: CREATE TABLE will create implicit sequence "baz_pkey_seq" for serial column "baz.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "baz_pkey" for table "baz"
ERROR: there is no unique constraint matching given keys for referenced table "bar"
********** Error **********
ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830
¿por qué la PK declarada no se considera una restricción única? no es como si tuvieras un PK no único ... – amphibient
Debe ser único en la tabla al que "apunta", porque si no lo está, el motor de la base de datos no tendrá forma de saber a qué fila te estás refiriendo realmente. –