これは私にはわからないことですが、誰かが説明できますか?
テーブルを作成します
CREATE TABLE cali (id SERIAL PRIMARY KEY,
ALK_from char,
ALK_to char,
AND_from char,
AND_to char);
次に、単純にcsvファイルからいくつかのデータを挿入しようとします
\COPY cali FROM '/home/.../data/output/id_cali.csv' (FORMAT CSV);
これは私にこのエラーを与えます:
ERROR: value "4372840000" is out of range for type integer
CONTEXT: COPY cali, line 1, column id: "4372840000"
私は4372840000が整数オーバーフローを引き起こすことを知っています。そのため、最初に値を文字として挿入しようとしています。
しかし、私の理解はid SERIAL PRIMARY KEY
ある種の自動インクリメントです。列id
に値4372840000が使用されるのはなぜですか?
ファイルは次のようになります
4372840012,4372840013,13,14,
4372840014,4372840014,15,15,
テーブルは
create table cali (
id serial primary key,
alk_from bigint,
alk_to bigint,
and_from int,
and_to int
);
そして、やります
\COPY cali (alk_from, alk_to, and_from, and_to)
FROM '/home/.../data/output/id_cali.csv'
(FORMAT CSV);
そのため、idシリアル列に挿入しないことがわかります。シリアル型は真の型ではありません。 マニュアルから :
Smallserial、serial、bigserialのデータ型は真の型ではなく、一意の識別子列を作成するための表記上の便宜にすぎません(他のいくつかのデータベースでサポートされているAUTO_INCREMENTプロパティと同様)。
したがって、整数列を作成し、そのデフォルト値がシーケンスジェネレーターから割り当てられるように調整しました
同じステートメントでテーブルを作成できますが、その後、次のステートメントを実行します-基本的に、id列のデータ型を変更します。
alter table cali alter column id type bigint;