在pgsql中,有没有办法让表中有多个值,然后选择其中的一个(比如other_id),找出它的最高值,并将每个新条目放在表中从该值增加。将列的数据类型更改为串行
我想这只是太容易有工作的机会..
ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL
____________________________________
ERROR: type "serial" does not exist
感谢任何见解!
在pgsql中,有没有办法让表中有多个值,然后选择其中的一个(比如other_id),找出它的最高值,并将每个新条目放在表中从该值增加。将列的数据类型更改为串行
我想这只是太容易有工作的机会..
ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL
____________________________________
ERROR: type "serial" does not exist
感谢任何见解!
在docs快速浏览告诉你,
The data types smallserial, serial and bigserial are not true types but merely a notational convenience for creating unique identifier columns
如果你想使现有的(整数)列“串行”,只是手动创建序列工作(任意名称),请将其当前值设置为当前address.new_id
值的最大值(或更大值),并将其设置为address.new_id
列的默认值。
要设置序列的值,请参见here。
SELECT setval('address_new_id_seq', 10000);
这只是一个例子,使用自己的序列的名字(任意的,你创建一个),以及一些比你列的最大电流值。
更新:由卢卡斯的回答中指出(这应该是acccepted一个),你也应该指定的列序‘属于’使用CREATE/ALTER SEQUENCE ... OWNED BY ...
查找到PostgreSQL文档datatype serial。串行只是简短的。
CREATE TABLE tablename (
colname SERIAL
);
等同于指定:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
也许你能解释一点,为什么你需要一个新的序列标识符添加到可能已经有一个主键的表?你想用串行标识符替换现有的主键吗?这一切的背景是什么? – 2013-05-10 03:50:08
@CraigRinger在我最后一个问题中,我无法导入数据库。我决定,因为我的系统需要一些重要的升级,所以要在明天的工作时间处理。我只需要访问几个表格。所以我带了一张桌子,但是在表格中控制增量列的顺序是导致传输问题的原因。我没有运气改变列作为主键,所以我想我可以使它成为一个“串行”,从表的当前最高值开始。做一个新的col,并使其成为PrimKey会更容易吗? – 1252748 2013-05-10 04:06:11
最好链接到相关背景下需要的任何以前的问题。你怎么“转移”它? “没有任何运气”在某种意义上?确切的命令,确切的错误消息等。 – 2013-05-10 04:08:19