在pgsql中,有没有一种方法可以让一个包含多个值的表,然后 Select 其中一个(比如说,other_id),找出它的最高值,并使表中的每个新条目都从该值递增.

我想这太容易了,不可能有工作的机会..

ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL

____________________________________ 
ERROR:  type "serial" does not exist

非常感谢您的帮助!

推荐答案

快速浏览一下docs就知道了

数据类型包括smallserial、serial和bigserial are not true types

如果要使现有(整数)列作为"序列"工作,只需手动创建序列(名称是任意的),将其当前值设置为当前address.new_id值的最大值(或更大),并将其设置为address.new_id列的默认值.

要设置序列的值,请参见here.

SELECT setval('address_new_id_seq', 10000);

这只是一个例子,使用您自己的序列名(任意,由您创建),并使用一个大于列的最大当前值的数字.


Update:正如Lucas的答案(应该是认可的答案)所指出的,您还应该使用CREATE/ALTER SEQUENCE ... OWNED BY ...来指定序列"属于"哪个列

Postgresql相关问答推荐

PostgreSQL:如何 for each 唯一的客户输入/更新列中的数据,并将其递增1直到表的末尾

使用PGx在围棋中执行多条SQL语句

到第二天的Postgres计时器

将XML解析从T-SQL迁移到Postgres时出现问题

使用 WHERE 子句创建递归视图

PL/pgSQL 中 PL/SQL %ISOPEN 的类似功能是什么?

从 Postgres 字段中的多个值中进行 Select

当脚本工作时,Postgres now() 时间戳不会改变

SQLAlchemy、Psycopg2 和 Postgresql 复制

SQL数据库表中的多态性?

如何在 PostgreSQL 触发器函数中获取表名?

gem install pg 无法绑定到 libpq

获取 PostgreSQL 中当前正在运行的查询的参数

如何判断每个组中是否存在值

Sidekiq - 无法在 5.000 秒内获得数据库连接

如何为查询执行设置语句超时

向 Postgres 整数数组添加值

在 postgres 中创建超级用户

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

PostgreSQL 9 在 Windows 上安装:Unable to write inside TEMP environment path.