当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL BIGSERIAL和插入时的“复制密钥”

葛阳华
2023-03-14

我有一张桌子

CREATE TABLE users (
  id BIGSERIAL NOT NULL PRIMARY KEY,
  created_at TIMESTAMP DEFAULT NOW()
);

首先我跑

INSERT INTO users (id) VALUES (1);

我跑完之后

INSERT INTO users (created_at) VALUES ('2016-11-10T09:37:59+00:00');

我得到

错误:重复的键值违反唯一约束“users\u pkey”详细信息:键(id)=(1)已存在。

为什么我自己插入“id”时id序列不递增?

共有1个答案

子车桐
2023-03-14

这是因为只有当您省略SET子句中的列或插入特殊值DEFAULT时,才会计算DEFAULT子句。

在第一个INSERT中,不会计算DEFAULT子句,因此不会增加顺序。第二个INSERT使用DEFAULT子句,序列增加并返回值1,该值与前一个INSERT中明确给出的值冲突。

不要将INSERTs与使用明确指定列的序列和INSERTs自动创建值混合使用。或者,如果必须这样做,您应该确保这些值不会发生冲突,例如,使用偶数表示自动生成的值,使用奇数表示显式INSERTs。

 类似资料:
  • 我正在mongod db Collection中插入文档 每次triggerdate和事件都会更改,但如果以任何时间间隔连续插入它们,则会出现mongo重复错误。 但如果我们在时间倒流的情况下插入,它就会被插入。 那么,ObjectId的创建是怎样的呢?它是基于时间的吗?错误是 MongoError:E11000重复密钥错误集合:org\u mssdemocustomer。testalerts索引

  • 好的,这个问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入的行的id,但如果没有插入行,我希望得到一个零。问题如下: I INSERT...UPDATE一些记录:由于行是新插入的,因此返回所有ID 然后重复这个过程:这一次不返回ID。耶!这正是我想要的 我更改了一个列值并重复该过程:但现在返回了我更改了列值的行的ID。这让我很生气

  • 问题内容: 我有一个带有唯一主键列的表。有时,当我执行查询时会收到错误消息,因为该值已被使用。 我可以使用和捕获此特定错误吗? 问题答案: 看起来mysql为重复的主键抛出了1062错误代码。您可以检查sql异常的错误代码: 注意,这种方法不是跨数据库供应商的,因为不同的供应商对于重复的PK可能具有不同的错误代码。

  • 本任务将演示将现有的证书和密钥添加到 Istio CA 中。 默认情况下,Istio CA 生成自签名 CA 证书和密钥,并使用它们签署工作负载证书。Istio CA 也可以使用我们指定的证书和密钥来签署工作负载证书。接下来我们将演示将证书和密钥插入 Istio CA 的示例。 开始之前 根据安装指南中的快速入门指南,在 Kubernetes 集群中安装 Istio。 在安装步骤的第四步应该启动身

  • 我的意图是创建4个Emp对象。2个对象(e1和e2)具有相同的哈希代码。因此,当插入e1(插入在e2之后)时,hashmap会意识到具有相同哈希值的对象已经存在(对象e2)。然后它会将槽中所有对象的键与相同的哈希值进行比较。如果它找到一个具有匹配键的对象(通过调用下面Emp类的equals方法),它将用新值替换旧值。 下面请看一下测试代码: 我期望的输出:替换的记录名称:Terry,年龄:60名称

  • 问题内容: 我可以使用连接的redis-cli复制密钥吗,redis中是否预定义了任何命令? 将FSS_SYSAGENT复制到FSS_SYSAGENTDuplicate。 10.44.112.213:6403> hgetall FSS_SYSAGENT 1)“ SYSTEM_01” 2)“ {\” port \“:\” 4407 \“,\” ipAddress \“:\” 10.44.112.21