2012-01-15 167 views
2

我試圖從php使用「\ copy」命令將一個txt/csv文件導入到我的postgres數據庫中。我無法使用COPY而不是\ copy,因爲我需要它作爲psql客戶端執行。我的代碼是:使用php導入一個txt文件到postgres時的問題

$query = '\\'.'copy data1 FROM "data1.txt" WITH CSV HEADER DELIMITER AS "," QUOTE AS "^"'; 

$result = pg_query($conn,$query); 
if (!$result) { 
    echo "cannot copy data\n"; 
} else { 
    echo "SUCCESS!"; 
} 

當我運行這個PHP文件,我得到這個錯誤:

PHP Warning: pg_query(): Query failed: ERROR: syntax error at or near "\" 
LINE 1: \copy data1 FROM "data1.txt" WITH ... 
    ^in script.php on line 30 
+0

我不知道pgsql,所以不能真正幫助你,但我只是將它導入到sqlite,然後通過 – RoboTamer 2012-01-15 10:50:53

回答

6

其實,你可以不通過pg_query()運行\copy。它是不是SQL命令。它是psql client的元命令。

在那裏你可以EXCUTE:

\copy data1 FROM 'data1.txt' WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^' 

或者運行shell命令:

psql mydb -c "\copy data1 FROM 'data1.txt' 
       WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'" 

注意引號。值需要爲single-quoted in PostgreSQL'value'
雙引號用於標識符 - 實際僅用於帶有大寫或非法字符的標識符或保留字:"My table"

+0

sql它感謝Erwin,我試圖複製爲超級用戶(使用COPY)和它成功了! – 2012-01-15 12:15:10

+0

COPY和\ COPY有什麼區別? – Tim 2014-05-31 15:47:22

+1

@Tim:'COPY'是SQL命令並在服務器上運行。 '\ copy'是'psql'命令,它包裝'COPY'以便從客戶端使用(方便本地文件)。 – 2014-05-31 21:29:36