PostgreSQL/pgAdmin4 ERROR: no hay ninguna limitación única que coincida con las teclas dadas para tabla referencia "index"

Estoy tratando de transformar mi diseño de MySQL a PostgreSQL pero cuando intento crear la tabla "index":

CREATE TABLE  "model1"."index" (
  "id_index" INT GENERATED ALWAYS AS IDENTITY ,
  "index_name" VARCHAR(5) NOT NULL,
  "index_type_id_index_type" INT  NOT NULL,
  "index_provider_id_index_provider" INT  NOT NULL,
  "miseq" VARCHAR(45) NOT NULL,
  "nextseq" VARCHAR(45) NOT NULL,
  PRIMARY KEY ("id_index"),
  CONSTRAINT "fk_index_index_type"
    FOREIGN KEY ("index_type_id_index_type")
    REFERENCES "model1"."index_type" ("id_index_type")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT "fk_index_index_provider"
    FOREIGN KEY ("index_provider_id_index_provider")
    REFERENCES "model1"."index_provider" ("id_index_provider")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

He recibido este error: ERROR: no hay ninguna limitación única que coincida con las claves dadas para tabla referencia "index".

Las dos tablas que contienen las llaves extranjeras fueron creadas antes de la tabla "index":

CREATE TABLE  "model1"."index_type" (
  "id_index_type" INT GENERATED ALWAYS AS IDENTITY ,
  "name" VARCHAR(3) NOT NULL,
  PRIMARY KEY ("id_index_type"));

CREATE TABLE  "model1"."index_provider" (
  "id_index_provider" INT GENERATED ALWAYS AS IDENTITY ,
  "name" VARCHAR(40) NOT NULL,
  PRIMARY KEY ("id_index_provider"));

Pregunta hecha hace 3 años, 4 meses, 29 días - Por pixelpioneerc4b5


3 Respuestas:

  • Resuelto. El error estaba en otra tabla como @a_horse_with_no_name sugirió.

    Respondida el Dec 18, 2020 a las 10:15 - por devdoodle

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe a que estás intentando crear una tabla llamada "index", lo cual es un término reservado en PostgreSQL. Para evitar este error y poder crear la tabla con ese nombre, deberías rodear el nombre de la tabla con comillas dobles, para indicar que es un identificador:

    sql
    CREATE TABLE "model1"."index" (
      "id_index" INT GENERATED ALWAYS AS IDENTITY ,
      "index_name" VARCHAR(5) NOT NULL,
      "index_type_id_index_type" INT  NOT NULL,
      "index_provider_id_index_provider" INT  NOT NULL,
      "miseq" VARCHAR(45) NOT NULL,
      "nextseq" VARCHAR(45) NOT NULL,
      PRIMARY KEY ("id_index"),
      CONSTRAINT "fk_index_index_type"
        FOREIGN KEY ("index_type_id_index_type")
        REFERENCES "model1"."index_type" ("id_index_type")
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT "fk_index_index_provider"
        FOREIGN KEY ("index_provider_id_index_provider")
        REFERENCES "model1"."index_provider" ("id_index_provider")
        ON DELETE NO ACTION
        ON UPDATE NO ACTION);
    

    Al encerrar el nombre de la tabla "index" entre comillas dobles, deberías ser capaz de crear la tabla sin problemas.

    Respondida el Dec 19, 2020 a las 10:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • id" VARCHAR(40) NOT NULL, PRIMARY KEY CONSTRAINT, foreign KEY CONSTRAINT FOREIGN KEY REFERENCE "miseq" ("id_seq") ON CASCADE ON

    Respondida el Dec 19, 2020 a las 10:26 - por Gemini

    Votos positivos: 0 | Votos negativos: 0