【问题标题】:Duplicate Primary Key in PostgreSQL tablePostgreSQL表中的重复主键
【发布时间】:2017-09-18 15:06:17
【问题描述】:

我在 PostgreSQL 数据库中创建了一个名为“链接”的表。然后我创建了另一个与'link'结构相同的表'link_copy'

CREATE TABLE link (
id select PRIMARY KEY,
url VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL);

CREATE TABLE link_copy (LIKE link);

我将 'id' = 2 的行从“link”复制到“link_copy”。之后,我将所有行从“link”复制到“link_copy”。我很惊讶在 'link_copy' 中看到两次 'id' = 2 的行。 如果我选择了 'id' 列作为主键(默认情况下是 UNIQUE NOT NULL),那么为什么它允许在 'link_copy' 中插入两次 'id' = 2 行?

我在 Mac 上使用带有 pgadmin III 的 postgresql 9.5。

screenshot for final link_copy status

【问题讨论】:

  • CREATE TABLE link ( id select PRIMARY KEY, ... ); 这不会出错?
  • 向我们展示创建表格的代码,就像您拥有的一样。
  • @OtoShavadze 我已经更新了代码。所有代码都在 SQL 编辑器上成功运行。我还添加了最终截图。

标签: sql postgresql


【解决方案1】:

当您使用CREATE TABLE 命令创建与另一个具有相同结构的新表时,它会复制列,但不会复制所有约束。您的link_copy 表在以这种方式创建后不会定义主键。

【讨论】:

  • 谢谢!我检查了 postgresql 文档是否相同:它指出“只有在指定了包含索引时,才会在新表上创建原始表上的索引、主键、唯一和排除约束。”
【解决方案2】:

创建如下表。这将创建所有约束。

CREATE TABLE link_copy (LIKE link  including constraints including indexes);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2022-11-21
    • 2020-02-23
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多