我从MySQL切换到PostgreSQL,我想知道我如何能有一个INT列与自动递增。我在PostgreSQL文档中看到了一个名为SERIAL的数据类型,但我在使用它时遇到了语法错误。
当前回答
如果你想在已经存在的表中添加sequence到id,你可以使用:
CREATE SEQUENCE user_id_seq;
ALTER TABLE user ALTER user_id SET DEFAULT NEXTVAL('user_id_seq');
其他回答
抱歉,要重复一个老问题,但这是谷歌上弹出的第一个Stack Overflow问题/答案。
这篇文章(首先在谷歌上发布)讨论了在PostgreSQL 10中使用更新后的语法: https://blog.2ndquadrant.com/postgresql-10-identity-columns/
这恰好是:
CREATE TABLE test_new (
id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
);
希望这对你有所帮助。
这种方法肯定有效,我希望它能有所帮助:
CREATE TABLE fruits(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');
or
INSERT INTO fruits VALUES(DEFAULT,'apple');
你可以在下一个链接中查看详细信息: http://www.postgresqltutorial.com/postgresql-serial/
如果你想在已经存在的表中添加sequence到id,你可以使用:
CREATE SEQUENCE user_id_seq;
ALTER TABLE user ALTER user_id SET DEFAULT NEXTVAL('user_id_seq');
自从PostgreSQL 10
CREATE TABLE test_new (
id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
payload text
);
是的,SERIAL是等价的函数。
CREATE TABLE foo (
id SERIAL,
bar varchar
);
INSERT INTO foo (bar) VALUES ('blah');
INSERT INTO foo (bar) VALUES ('blah');
SELECT * FROM foo;
+----------+
| 1 | blah |
+----------+
| 2 | blah |
+----------+
SERIAL只是一个关于序列的创建表时间宏。不能在现有列上更改SERIAL。
推荐文章
- 查询JSON类型内的数组元素
- 获得PostgreSQL数据库中当前连接数的正确查询
- 纬度和经度的数据类型是什么?
- 如何在PostgreSQL中临时禁用触发器?
- 输入文件似乎是一个文本格式转储。请使用psql
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何添加列,如果不存在PostgreSQL?
- 如何在Postgres中获得两个字段的MIN() ?
- 截断Postgres数据库中的所有表
- 如何连接列在Postgres选择?
- 将varchar字段的类型更改为整数:"不能自动转换为整数类型"
- PostgreSQL可以索引数组列吗?
- PostgreSQL:角色不允许登录