版本: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的所有内容。制成。
使用
创建T3CREATE TABLE T3 (LIKE T1 INCLUDING ALL)
INSERT * INTO T3 SELECT * FROM T1
最终结果相当奇怪。来自T3的所有数据都被复制到T2,但是ID的顺序似乎是随机的。
但是,如果我调用相同的脚本直接将数据从T1复制到T3,结果是正确的。更奇怪的是,如果我将上述脚本分成两个单独的脚本,它也是正确的
任何线索?
答案 0 :(得分:1)
您没有指定currentPlayer = session.query(Player).filter(Player.firstName == playerObject.firstName).filter(playerObject.lastName == Player.lastName).first()
子句。如果没有一个,PostgreSQL可能会以最快的顺序获取ORDER BY
的行。
尝试:
SELECT
请注意,严格来说,不能保证多行的CREATE TABLE T3 (LIKE T1 INCLUDING ALL);
INSERT INTO T3
SELECT * FROM T1 ORDER BY T1.id;
将按照从INSERT
读取的顺序处理行,但实际上PostgreSQL此时将始终按顺序处理它们而且它不太可能匆忙改变。