相关疑难解决方法(0)

约束定义DEFERRABLE INTITIALLY IMMEDIATE仍然是DEFERRED?

关于这个答案,我偶然发现了一个我无法解释的现象.

版本:
x86_64-unknown-linux-gnu上的PostgreSQL 9.1.2,由gcc-4.4.real编译(Debian 4.4.5-8)4.4.5,64位

请考虑以下演示.测试平台:

CREATE TEMP TABLE t (
  id  integer
 ,txt text
 ,CONSTRAINT t_pkey PRIMARY KEY (id) DEFERRABLE INITIALLY IMMEDIATE
);

INSERT INTO t VALUES
 (1, 'one')
,(2, 'two');
Run Code Online (Sandbox Code Playgroud)

1)修改多行的UPDATE语句:

UPDATE t
SET    id = t_old.id
FROM   t t_old
WHERE (t.id, t_old.id) IN ((1,2), (2,1));
Run Code Online (Sandbox Code Playgroud)

目前的实施似乎有一个错误?上面的UPDATE虽然不应该有效.约束已定义INITIALLY IMMEDIATE,我没有使用SET CONSTRAINTS.

我错过了什么,或者这是一个(相当无害)的错误?


2)数据修改CTE

因此,修改CTE的数据也可以工作,尽管它有一个NOT DEFERREDpk 失败:

WITH x AS (
    UPDATE t SET id = 1 WHERE id = 2 …
Run Code Online (Sandbox Code Playgroud)

postgresql constraints postgresql-9.1

14
推荐指数
2
解决办法
1万
查看次数

如何在没有任何数字丢失的情况下获得具有连续增加数字的列?

可能重复:
如何在PostgreSQL查询中显示行号?
在Postgresql PostgreSQL中重新排序带有标识符的列使用带子
选择的更新重新排序

我只是问在PostgreSQL中是否存在这样的可能性:如果我有5行并且在一列中有数字1, 2, 3, 4, 5并且在那些列中不是主键如果我删除说tird行postgreSQL重新枚举这个列所以我可以1, 2, 3, 4代替1, 2, 4, 5

postgresql triggers tabbing

7
推荐指数
1
解决办法
2882
查看次数