Pet*_*ter 5 postgresql pg-dump auto-increment
有人可以向我解释为什么使用以下脚本创建 PostgreSQL 表:
CREATE TABLE users
(
"id" serial NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY ("id")
)
Run Code Online (Sandbox Code Playgroud)
pg_dump以以下格式转储:
CREATE TABLE users(
"id" integer NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL
);
ALTER TABLE users OWNER TO postgres;
CREATE SEQUENCE "users_id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE "users_id_seq" OWNER TO postgres;
ALTER SEQUENCE "users_id_seq" OWNED BY users."id";
ALTER TABLE ONLY users
ADD CONSTRAINT users_pkey PRIMARY KEY ("id");
Run Code Online (Sandbox Code Playgroud)
显然,以上只是从转储文件中提取的一小部分。
为什么pg_dump将数据类型serial转换为integer?当我从转储的 SQL 文件中恢复数据库时,它几乎变得无用,因为自动增量停止工作,并且当从前端表单添加新记录时,它失败并显示“id 字段不能为空”行的消息,显然因为它是一个设置为非空的主键,但自动增量应该启动并用序列中的下一个值填充该字段。
我在这里错过了什么吗?
嗯,它在这里有效。测试片段:
DROP SCHEMA tmpdump ;
CREATE SCHEMA tmpdump ;
set search_path = tmpdump ;
-- SELECT version();
DROP TABLE lusers;
CREATE TABLE lusers
(
"id" serial NOT NULL
, "name" character varying(150) NOT NULL
, "surname" character varying (250) NOT NULL
, "dept_id" integer NOT NULL
, CONSTRAINT lusers_pkey PRIMARY KEY ("id")
);
INSERT INTO lusers ("name", "surname", "dept_id") VALUES
('Joop', 'Zoetemelk', 2) , ('Jan', 'Jansen', 3)
, ('Ard', 'Schenk', 4) , ('Kees', 'Verkerk', 5);
Run Code Online (Sandbox Code Playgroud)
仅转储tmpdump架构:
pg_dump -U someusername yourdbname -n tmpdump -F p --inserts | less
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3175 次 |
| 最近记录: |