2012-02-10 8 views
0

我正在開發一個項目,我必須解析一堆.csv文件,所有不同的格式,並通過一些包含不同種類的數據C++函數。之後,我從這些文件中提取數據,並創建一個可以在psql中導入的.sql文件,以便在稍後階段將數據插入到PostgreSQL數據庫中。PostgreSQL:創建一個.sql文件以最快的方式將數據插入表格

但我無法弄清.sql文件的正確語法。下面是一個示例表和樣品.sql文件複製同樣的錯誤我得到:

表創建代碼:

CREATE TABLE "Sample_Table" 
(
    "Col_ID" integer NOT NULL, 
    "Col_Message" character varying(50), 
    CONSTRAINT "Sample_Table_pkey" PRIMARY KEY ("Col_ID") 
) 

insertion.sql(副本行後,由製表符分隔的字段)

copy Sample_Table (Col_ID, Col_Message) from stdin; 
1 This is Spaaarta 
2 Why So Serious 
3 Baazinga 
\. 

現在,如果我執行上面的SQL文件,我得到以下錯誤:

ERROR: syntax error at or near "1" 
LINE 2: 1 This is Spaaarta 
     ^


********** Error ********** 

如果可以提供幫助,我正在運行PostgreSQL 9.1版本,所有上述查詢都是通過PGAdmin III軟件執行的。

回答

1

三件事來檢查:

  • 是否有實際的列之間只有一個製表符?空間是一個沒有去的地方。

  • 是否還有更多的錯誤信息?我失蹤至少之一。 (請參見下文)

  • 當您強制區分大小寫的表和列名稱時,必須這樣做。因此,您必須這樣寫:

copy "Sample_Table" ("Col_ID", "Col_Message") from stdin;

否則你就會拿到theese錯誤:

psql:x.sql:1: ERROR: relation "sample_table" does not exist 
psql:x.sql:5: invalid command \. 
psql:x.sql:5: ERROR: syntax error at or near "1" 
LINE 1: 1 This is Spaaarta 
     ^

有了這些東西的地方,我可以成功地使用您的示例數據。

編輯錯誤變化:提問者現在有

ERROR: invalid input syntax for integer: "1 'This is Spaaarta'" 

因此,一些與1也不行。

我的猜測是,這是一個編碼問題。 Windows及其UTF-16的東西可能是這裏的罪魁禍首。

調試其他網絡的這類問題並不容易,因爲對於很多半智能程序來說,他們中的大多數人喜歡調整「少數」的東西。

但首先要檢查的幾件事情在PSQL:

\encoding 
show client_encoding; 
show server_encoding; 

按照引擎收錄數據,這些應該是相同的,「SQL_ASCII」,「LATIN1」或「UTF-8」之一。

如果他們已經或者如果調整他們沒有幫助:Unix/Linux/cygwin有一個hexdump -C x.sql程序,將其輸出發佈到pastebin。不要使用像ultraedit這樣的Windows編輯器中的hexdump - 他們已經愚弄了我好幾次。將文件傳輸到Linux時務必使用二進制傳輸。

+0

錯誤:無效的整數輸入語法:「1」這是Spaaarta'「 - 這是我從psql使用\ i命令執行時現在得到的錯誤消息。 http://pastebin.com/WR6yN8Ar是我使用的輸入文件(注意它有雙引號的列名和表名) – mahtuag 2012-02-16 12:40:43

+0

@MHG:使用問題中的CREATE TABLE和原始的pastebin數據_I_得到另一個錯誤:'...錯誤:結束標誌損壞'。在將一行換行添加到'\ .'行後,文件正確導入(每個標題都被''包圍,但這不是一個showstopper)。 – 2012-02-16 13:51:24

+0

@MHG:請在答案中查看我的更新。 – 2012-02-16 14:22:55

1

PgAdmin不支持以與psql相同的方式執行COPY命令(或者至少它沒有最後一次使用版本1.14嘗試它)。使用psql來執行腳本,或者使用INSERT語句。

+0

我也是用psql試過的。同樣的錯誤成立。 – mahtuag 2012-02-16 12:39:03

+0

對於psql,在複製命令中引用表名和列名後,它對我來說工作正常。 – araqnid 2012-02-16 14:04:54

相關問題