2011-11-14 63 views
1

在我的PostgreSQL數據庫我創建了一個名爲NAV_DATA表五列:PostgreSQL的COPY命令發出

id (PKEY) 
,name (VARCHAR) 
,call_type (VARCHAR) 
,date_created (date) 

這些列我有CSV文件的分隔符TAB \t和Quotechar "
它也有一些中間欄中的空白字段。

如何允許在複製命令中接受空值?我想插入列(name, call_type, date_created)。我的csv中沒有該字段id

如何將特定列複製到數據庫中?

該問題也與分隔符TAB \t

+1

請查看本手冊的[適當頁面](http://www.postgresql.org/docs/current/static/sql-copy.html),如果看不清楚的地方請修改您的問題。 –

+0

你提到「5列」,但只顯示4? –

回答

2
copy "NAV_DATA" (name,call_type,date_created) from 'c:/test.txt' with delimiter '\t' csv 
+0

我認爲表名不應該在引號中。懷疑是主鍵ID是否會爲每條記錄自動增加? – Nava

+0

Postgres對錶和列名稱是區分大小寫的,除非被qoutes包圍,否則它將轉換爲小寫。這將意味着NAV_DATA不會匹配名爲NAV_DATA的表。你將不得不在你的查詢中編寫「NAV_DATA」。 – Tailor

+0

您可以使用Erwin建議的序列。就我個人而言,當我導入CSV的時候,我導入到一個與CSV結構相匹配的表中,然後使用SQL查詢將導入的髒表複製到我的乾淨表中。通過這種方式,您可以修剪空格,設置空值,創建序列並運行查詢DISTINCT以消除重複項。 – Tailor

1

如果你想知道NULL值是如何在CSV文件中表示有看手動頁@Milen被鏈接到他的評論。或者將一些測試數據(包括NULL值)寫入您的表格中並使用COPY TO導出。你可以得到COPY FROM的預期格式。

在標準格式NULL\N分隔符之間沒什麼表示的,在標準CSV格式。並且COPY命令中未提及的列將填寫其各自的默認值。

例如,一個串行列(如可能爲id)將從每個行的相關序列中獲得nextval()。如果id尚未設置默認值,則爲create a sequence,並使nextval('my_sequence_name')爲默認值。