請教大家
在postgresql資料庫中,我建立一個log的資料表,然後匯入資料到log資料表內,接著透過下列的指令來產生一個自動編號欄位
create sequence testIncrement
increment 1
minvalue 1
maxvalue 999999999999
start 1
cache 1;
alter table testIncrement owner to confluence_user;
ALTER TABLE log2 ADD COLUMN id integer;
ALTER TABLE log2 ALTER COLUMN id SET STORAGE PLAIN;
ALTER TABLE log2 ALTER COLUMN id SET DEFAULT nextval('testIncrement'::regclass);
UPDATE log2 set id=nextval('testIncrement'::regclass);
ALTER TABLE log2 ALTER COLUMN id SET NOT NULL;
這個時候log資料表的原本資料已經產生一個自動編號的id欄位,但接著我透過下列的指令要在匯入其他資料的過程中,卻會產生下列的訊息,要如何來修正此問題呢?感謝
而我的CSV檔案的格式如下
你那是資料格式不對啊.
資料庫在埋怨 integer 格式的欄位,你要傳入的資料是 / 開頭的.
感謝,我發現我仍然需要在CSV檔案那裏手動餵入自動編號的值才可以
以我問題中的EXCEL圖示來看,id是空的值,且它依照表格的欄位順序來將CSV資料匯入到資料表內
如果資料表原本有資料,而我要繼續匯入資料的話,在自動編號的欄位上會有問題
你可以先匯入資料啊.然後再看號碼到多少,create sequence 的 start 從大一號開始就好了啊.
有一個問題不太明白,為什麼使用下列的語法,它不會依照表頭來自動匯入對應到指定的欄位名稱呢?謝謝
COPY log2 FROM '/home/anderson/12304.csv' CSV HEADER;
要看官網文件,不是自己想像.沒有根據header的名字去對應相同名字的欄位,這樣的事情.
點此看官網的copy指令
header 後面接的是boolean.
當你的CSV有header(第一行)時,就加上header.這樣就會跳掉,
是的,就是跳掉不處理.
所以用copy要載入資料的table,就要跟外部的CSV對應.
載入後可以再修改或是依照需要insert到別的table.