gpt4 book ai didi

Postgresql:意外的插入结果

转载 作者:行者123 更新时间:2023-11-29 13:27:39 25 4
gpt4 key购买 nike

版本:PostgreSQL 9.4.2

   Column   |  Type   |                           Modifiers                            
------------+---------+----------------------------------------------------------------
id | integer | not null default nextval('T1_id_seq'::regclass)
name | text |
value | text |
parent_id | integer |

Indexes:
"T1_pkey" PRIMARY KEY, btree (id)
"T1_id_idx" btree (id)

我在 Postgresql 中有两个这样的表,比如 T1 和 T2,它们具有树状数据结构,引用自己表中的数据。

我需要修改 T1 中的某些行,并按照这些行在 T1 中出现的确切顺序将其插入到 T2。到目前为止,我所做的是将相关行从表 T1 复制到临时表 T3 以进行数据修改,并在进行更改时插入从 T3 到 T2 的所有内容。

T3 是使用

创建的
CREATE TABLE T3 (LIKE T1 INCLUDING ALL)
INSERT * INTO T3 SELECT * FROM T1

最后的结果很奇怪。 T3 的所有数据都复制到 T2,但 ID 的顺序似乎是随机的。

然而,如果我调用相同的脚本将数据直接从 T1 复制到 T3,结果是正确的。更奇怪的是,如果我将上面的脚本分成两个单独的脚本来

  1. 从 T1 创建 T3 并将数据从 T1 复制到 T3
  2. 使用 INSERT 方法将 T3 复制到 T2。

有什么线索吗?

最佳答案

您没有指定 ORDER BY 子句。如果没有一个,PostgreSQL 可能会以最快执行的顺序为您的 SELECT 获取行。

尝试:

CREATE TABLE T3 (LIKE T1 INCLUDING ALL);

INSERT INTO T3
SELECT * FROM T1 ORDER BY T1.id;

请注意,严格来说,不能保证多行的INSERT会按照从SELECT中读取的顺序处理行,但实际上此时PostgreSQL将始终按顺序处理它们,并且不太可能匆忙更改。

关于Postgresql:意外的插入结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com