我用以下命令重命名了一个序列:
ALTER SEQUENCE TableIdSeq RENAME TO NewTableIdSeq;
但是,当我发出\d NewTableIdSeq
命令时,我得到以下输出:
Sequence "dev.newtableidseq"
Column | Type | Value
---------------+---------+---------------------
sequence_name | name | tableidseq <--------------- HASN'T CHANGED!!
last_value | bigint | 3
start_value | bigint | 1
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 1
log_cnt | bigint | 30
is_cycled | boolean | f
is_called | boolean | t
如您所见,序列的sequence_name
属性仍然设置为旧名称。我怎么才能在这里改名字呢?
发布于 2019-06-07 08:00:49
不必为那事担心了。存储在序列中的序列名称将被忽略。这个字段在PostgreSQL 10中消失了。
发布于 2018-03-19 18:09:42
您应该重命名序列,然后更改该列的默认值。
让我举一个例子:
create sequence tbl_id_seq;
create table tbl
(
id int default nextval('tbl_id_seq'),
f1 int,
f2 int
);
insert into tbl (f1, f2) values (1,2),(3,4),(5,6);
select * from tbl;
id | f1 | f2
-: | -: | -:
1 | 1 | 2
2 | 3 | 4
3 | 5 | 6
-- rename sequence
alter sequence tbl_id_seq rename to tbl_id_new_seq;
-- alter default value
alter table tbl alter column id set default nextval('tbl_id_new_seq');
-- restart sequence
alter sequence tbl_id_new_seq restart with 1;
-- check it by inserting new values
insert into tbl (f1, f2) values (1,2),(3,4),(5,6);
select * from tbl;
id | f1 | f2
-: | -: | -:
1 | 1 | 2
2 | 3 | 4
3 | 5 | 6
1 | 1 | 2
2 | 3 | 4
3 | 5 | 6
现在使用\d tbl
+-------------------------------------------------------------------------------+
| Table "public.tbl" |
+-------------------------------------------------------------------------------+
| Column | Type | Collation | Nullable | Default |
+--------+---------+-----------+----------+-------------------------------------+
| id | integer | | | nextval('tbl_id_new_seq'::regclass' |
+--------+---------+-----------+----------+-------------------------------------+
| f1 | integer | | | |
+--------+---------+-----------+----------+-------------------------------------+
| f2 | integer | | | |
+--------+---------+-----------+----------+-------------------------------------+
对于\d tbl_id_new_seq
:
postgres=# \d tbl_id_new_seq;
Sequence "public.tbl_id_new_seq"
-[ RECORD 1 ]------------------
Type | bigint
Start | 1
Minimum | 1
Maximum | 9223372036854775807
Increment | 1
Cycles? | no
Cache | 1
https://dba.stackexchange.com/questions/201703
复制相似问题