我id serial PRIMARY KEY在 PostgreSQL 表中有一个列。id因为我删除了相应的行,所以缺少许多s。
现在我想通过重新启动序列并以保留id原始id顺序的方式重新分配s来“压缩”表。是否可以?
例子:
id | data
----+-------
1 | hello
2 | world
4 | foo
5 | bar
Run Code Online (Sandbox Code Playgroud)
id | data
----+-------
1 | hello
2 | world
3 | foo
4 | bar
Run Code Online (Sandbox Code Playgroud)
我尝试了 StackOverflow answer 中建议的内容,但没有奏效:
# alter sequence t_id_seq restart;
ALTER SEQUENCE
# update t set id=default;
ERROR: duplicate key value violates unique constraint t_pkey
DETAIL: Key …Run Code Online (Sandbox Code Playgroud) 我有一个触发器错误,导致在 x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.3 中出现错误,由 gcc (Debian 4.9.2-10) 4.9.2, 64 位编译。每次出错期间,SERIAL 的主键都会增加。修复错误后,表格测量结果为
measurement_id | measurement_size_in_bytes | time
----------------+---------------------------+-------------------------------
1 | 77777 | 2015-07-14 18:29:56.858703+03
2 | 888 | 2015-07-14 18:29:56.882552+03
3 | 888 | 2015-07-14 18:30:15.505957+03
4 | 888 | 2015-07-14 18:41:01.878106+03
39 | 77777 | 2015-07-15 12:11:21.21391+03
40 | 77777 | 2015-07-15 12:11:59.551973+03
41 | 77777 | 2015-07-15 12:12:05.48982+03
42 | 77777 | 2015-07-15 12:13:02.402053+03
43 | 77777 | 2015-07-15 12:13:02.419412+03
44 | 888 | 2015-07-15 …Run Code Online (Sandbox Code Playgroud)