iT邦幫忙

0

postgresql 自動編號欄位的使用問題

  • 分享至 

  • xImage

請教大家
在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欄位,但接著我透過下列的指令要在匯入其他資料的過程中,卻會產生下列的訊息,要如何來修正此問題呢?感謝
https://ithelp.ithome.com.tw/upload/images/20171230/20003705fl7FyMi5Tv.jpg

而我的CSV檔案的格式如下
https://ithelp.ithome.com.tw/upload/images/20171230/20003705AEbIs5e9Vr.jpg

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
一級屠豬士
iT邦新手 2 級 ‧ 2017-12-30 14:20:19

你那是資料格式不對啊.
資料庫在埋怨 integer 格式的欄位,你要傳入的資料是 / 開頭的.

看更多先前的回應...收起先前的回應...
ektrontek iT邦研究生 1 級 ‧ 2018-01-01 22:52:56 檢舉

感謝,我發現我仍然需要在CSV檔案那裏手動餵入自動編號的值才可以
以我問題中的EXCEL圖示來看,id是空的值,且它依照表格的欄位順序來將CSV資料匯入到資料表內
https://ithelp.ithome.com.tw/upload/images/20180101/20003705LCM0tEZKYF.jpg

如果資料表原本有資料,而我要繼續匯入資料的話,在自動編號的欄位上會有問題

你可以先匯入資料啊.然後再看號碼到多少,create sequence 的 start 從大一號開始就好了啊.

ektrontek iT邦研究生 1 級 ‧ 2018-01-02 20:58:50 檢舉

有一個問題不太明白,為什麼使用下列的語法,它不會依照表頭來自動匯入對應到指定的欄位名稱呢?謝謝
COPY log2 FROM '/home/anderson/12304.csv' CSV HEADER;
https://ithelp.ithome.com.tw/upload/images/20180102/20003705Iy6wq6QyhL.jpg

要看官網文件,不是自己想像.沒有根據header的名字去對應相同名字的欄位,這樣的事情.
點此看官網的copy指令
header 後面接的是boolean.
當你的CSV有header(第一行)時,就加上header.這樣就會跳掉,
是的,就是跳掉不處理.
所以用copy要載入資料的table,就要跟外部的CSV對應.
載入後可以再修改或是依照需要insert到別的table.

我要發表回答

立即登入回答