0

今天我开始将 MySql 数据库移植到 PostgreSQL,但外键及其“共享”存在问题

我不知道如何解释,所以这里是创建脚本的一些伪代码:

create table id_generator (
id serial PRIMARY KEY,
description varchar(50) );

create table parent (
id REFERENCES id_generator(id),
--content );

create table child (
id REFERENCES id_generator(id),
id_parent REFERENCES parent(id),
--content );

因此,我使用一个表作为“id_generator”来创建 id,并为其他表提供对值表的引用。在 MySql 中我对此没有任何问题,所以我希望它也能在 PostgreSQL 中工作。

运行该脚本时,我收到错误消息,我需要在表格上添加一个primary key/来在其上创建引用。所以我把它改成:uniqueparent

create table id_generator (
id serial PRIMARY KEY,
description varchar(50) );

create table parent (
id REFERENCES id_generator(id) PRIMARY KEY,
--content );

create table child (
id REFERENCES id_generator(id),
id_parent REFERENCES parent(id),
--content );

所以服务器接受创建脚本,并且为一些插入设置了所有内容。

我使用以下命令创建第一个 id:

insert into id_generator(description) values("parentID");

然后我想添加一个父母:

insert into parent(id, /*content*/) values(1, /*content*/);

这也可以按预期工作,所以我需要插入一个childfor parent

insert into id_generator(description) values("childID");
insert into child(id,id_parent)values(2,1);

在这里我收到错误消息“错误:重复键值违反唯一约束详细信息:键(id_parent)=(1)已经存在”

编辑:

\d child;

         Tabelle ╗public.child½
      Spalte       |   Typ   | Attribute
-------------------+---------+-----------
      id           | integer | not null
      id_parent    | integer |
Indexe:
    "child_pkey" PRIMARY KEY, btree (id)Fremdschlⁿssel-Constraints:
    "child_id_parent_fkey" FOREIGN KEY (id_parent) REFERENCES parent(id)
    "child_id_generator_fkey" FOREIGN KEY (id) REFERENCES id_generator(id)

我该如何解决?

4

1 回答 1

1

好的,对不起,问题解决了,插入语句的双重调用:facepalm:

于 2013-03-04T16:19:57.253 回答