Saltar al contenido

Error de PostgreSQL: la relación ya existe

Este dilema se puede abordar de diferentes formas, pero nosotros te enseñamos la que en nuestra opinión es la solución más completa.

Finalmente descubro el error. El problema es que el principal key el nombre de la restricción es igual al nombre de la tabla. No sé cómo Postgres representa las restricciones, pero creo que el error “La relación ya existe” se activó durante la creación de la primaria. key restricción porque la tabla ya fue declarada. Pero debido a este error, la tabla no se creó al final.

No debe haber comillas simples aquí 'A'. Las comillas simples son para string literales: 'some value'.
Utilice comillas dobles para preservar la ortografía en mayúsculas de “A”:

CREATE TABLE "A" ...

O no use comillas en absoluto:

CREATE TABLE A ...

que es identico a

CREATE TABLE a ...

porque todo sin comillas identificadores se doblan a minúsculas automáticamente en PostgreSQL.


Podría evitar problemas con el nombre del índice por completo usando una sintaxis más simple:

CREATE TABLE csd_relationship (
    csd_relationship_id serial PRIMARY KEY,
    type_id integer NOT NULL,
    object_id integer NOT NULL
);

Hace lo mismo que su consulta original, solo que evita los conflictos de nombres automáticamente. Escoge el siguiente identificador libre automáticamente. Más sobre el tipo de serie en el manual.

No puede crear una tabla con un nombre que sea idéntico a una tabla o vista existente en el clúster. Para modificar una tabla existente, utilice ALTER TABLE (enlace), o para soltar todos los datos actualmente en la tabla y crear una tabla vacía con el esquema deseado, emita DROP TABLE antes de CREATE TABLE.

Podría ser que la secuencia que está creando sea la culpable. En PostgreSQL, las secuencias se implementan como una tabla con un conjunto particular de columnas. Si ya tiene la secuencia definida, probablemente debería omitir su creación. Desafortunadamente, no hay equivalente en CREATE SEQUENCE al IF NOT EXISTS construcción disponible en CREATE TABLE. Por lo que parece, es posible que esté creando su esquema incondicionalmente, de todos modos, por lo que es razonable usar

DROP TABLE IF EXISTS csd_relationship;
DROP SEQUENCE IF EXISTS csd_relationship_csd_relationship_id_seq;

antes de que se actualice el resto de su esquema; En caso de que no sea obvio, Esto eliminará todos los datos en el csd_relationship mesa, si hay alguna

Te mostramos las reseñas y valoraciones de los lectores

Recuerda algo, que te permitimos valorar este tutorial si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *