Lar*_*gas 1 postgresql bulkcopy serialization
这是我不明白的地方,有人可以解释一下吗?
我创建一个表
CREATE TABLE cali (id SERIAL PRIMARY KEY,
ALK_from char,
ALK_to char,
AND_from char,
AND_to char);
Run Code Online (Sandbox Code Playgroud)
然后我只是尝试像这样从 csv 文件中插入一些数据
\COPY cali FROM '/home/.../data/output/id_cali.csv' (FORMAT CSV);
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
ERROR: value "4372840000" is out of range for type integer
CONTEXT: COPY cali, line 1, column id: "4372840000"
Run Code Online (Sandbox Code Playgroud)
我知道 4372840000 会导致整数溢出。这就是为什么我首先尝试将值作为字符插入。
但我的理解是,这id SERIAL PRIMARY KEY
是某种自动增量,为什么值 4372840000 用于列id
?
该文件看起来像这样
4372840012,4372840013,13,14,
4372840014,4372840014,15,15,
Run Code Online (Sandbox Code Playgroud)
表应该是
create table cali (
id serial primary key,
alk_from bigint,
alk_to bigint,
and_from int,
and_to int
);
Run Code Online (Sandbox Code Playgroud)
并且做
\COPY cali (alk_from, alk_to, and_from, and_to)
FROM '/home/.../data/output/id_cali.csv'
(FORMAT CSV);
Run Code Online (Sandbox Code Playgroud)
这样它就知道不要插入到 id 序列列中。串行类型不是真正的类型。从手册:
数据类型 smallserial、serial 和 bigserial 不是真正的类型,而仅仅是创建唯一标识符列的符号方便(类似于某些其他数据库支持的 AUTO_INCREMENT 属性)
因此,我们创建了一个整数列并安排它的默认值从序列生成器中分配
归档时间: |
|
查看次数: |
4669 次 |
最近记录: |