2014-11-04 64 views
0

我有一個數組,我想用它來填充使用pg_copy_from的pgsql表。但是,當我沒有爲我的串行index列提供信息時,出現以下錯誤。pg_copy_from不會讓我的索引列自身增加,並且不會佔用空白值

ERROR: there is data for a column index 

如何強制pg_copy_from忽略我的索引列並讓它獨立增加。由於需要逗號分隔值我想這樣做有時像這樣將它傳遞一個空字符串索引的位置:

array_walk($logs, function(&$record) { 
    "'', " . $record; 
}); 

但沒有奏效。我也嘗試製作一張表,其中index是第二列,並且我沒有傳遞第二個值,但是我收到了同樣的錯誤。有沒有這個選項?

回答

0

免責聲明。我不是一個PHP開發人員,但它聽起來像你可能需要在你的「索引」列中插入單詞DEFAULT到你的數組中(並且我假設這是你的主鍵,它有一個音序器)。例如:

create temp table foobar(id serial, foo text); 
insert into foobar values (DEFAULT, 'hello'); 
insert into foobar values (DEFAULT, 'world'); 
select * from foobar; 
+----+-------+ 
| id | foo | 
+----+-------+ 
| 1 | hello | 
| 2 | world | 
+----+-------+ 
(2 rows) 
0

pg_copy_from不允許您排除某些列。 pg_query和pg_put_line的組合允許這是因爲您自己的COPY語句:

<?php 
    $conn = pg_pconnect("dbname=foo"); 
    pg_query($conn, "create table bar (a serial, b char(16), d float8)"); // just an example 
    pg_query($conn, "copy bar(b, c) from stdin"); // only columns b and c ! 
    pg_put_line($conn, "hello world\t4.5\n"); 
    pg_put_line($conn, "goodbye world\t7.11\n"); 
    pg_put_line($conn, "\\.\n"); 
    pg_end_copy($conn); 
?> 
+0

謝謝我會試試這個。我很好奇,爲什麼這樣:'array_walk($ logs,function(&$ item,$ key){$ item = time()。$ key。「,」。$ item;});'concatenation產生錯誤'PHP警告:pg_copy_from():複製命令失敗:錯誤:列「entry」缺少數據 – 1252748 2014-11-05 15:36:30