例子:

create table foo(
    id serial, 
    txt text
);

insert into foo(txt) values ('a'),('b'),('c') returning id;

返回:

 id 
----
  1
  2
  3
(3 rows)

返回值中的first id始终是'a'id'b'的第二个,以此类推,这是insert into的定义行为,还是在奇怪的情况下可能失败的巧合?

推荐答案

我看不到任何the documentation件能保证RETURNING件的订单,所以我认为你不能相信它.RETURNING订单很可能与VALUES订单匹配,但我看不到任何关于VALUES订单将被插入其中的保证;VALUES几乎肯定会按从左到右的顺序插入,但同样,没有文件保证.

此外,关系模型是基于集合的,因此排序是用户应用的东西,而不是关系的固有属性.一般来说,如果没有明确指定顺序的方法,就没有隐含的顺序.

执行摘要:你看到的顺序可能总是会发生,但不能保证,所以不要依赖它.

Postgresql相关问答推荐

使用PythonPolar在PostgreSQL中存储

正在加载 pgAdmin 4 v7.4...同时打开 pgAdmin

Npgsql中准备好的语句和参数化查询有什么区别?

是否可以在 postgresql 中添加表元数据?

在 KnexJS 中插入

当脚本工作时,Postgres now() 时间戳不会改变

Postgres中的GROUP BY - JSON数据类型不相等?

如何更改几何列的 SRID?

使用 RPostgreSQL 进行 UTF-8 / Unicode 文本编码

如何使用 ActiveRecord json 字段类型

将 PostgreSQL 配置为仅适用于 LOCALHOST 或指定的 ip + 端口

如何将1 天 01:30:00等间隔转换为25:30:00?

H2 postgresql mode模式似乎不起作用

Postgres 外键on update和on delete选项如何工作?

Postgres 日期重叠约束

postgres - 比较两个数组

PostgreSQL 条件 where 子句

处理用户发送的string contains null byte

Postgresql 对象 ID 和元组

pgadmin 错误:no password supplied