pg_copy_from的输入的数组格式是什么?

问题描述

我正在尝试使用PHP将历史数据的许多 CSV文件加载到PGsql服务器。我注意到PHP提供了一个pg_copy_from()函数,用于将本地数据加载到远程服务器中,但是输入的确切格式是模糊的。

documentation说它期望一个行数组,每行是该行中值的定界字符串。 PHPfile()函数以所述格式返回数组,但是将其输入pg_copy_from()则会返回错误

$rows = file('path/to/data.csv',FILE_IGnorE_NEW_LInes); // Same result without ignore_new_lines
pg_copy_from($db,'dest_table',$rows,',');

'PHP Warning:  pg_copy_from(): copy command Failed: ERROR:  invalid input Syntax for integer: ""col_2""'

我检查了数组$rows,它的格式如下:

[index]=>""foo",3,7,"bar",500,"z""

所有字符串值和字符串本身都用双引号引起来。我假设它正在尝试将整个字符串加载到表的第一列中,因此出现col_2无法加载的错误(因为没有加载)。

我对数组的假设是错误的还是定界的字符串是否需要不同的格式(如果这样,如何)?

感谢您的帮助/提示

解决方法

如@Wolph的注释中所述-只需删除$rows数组的第一个元素,因为它包含标题。要删除数组array_shift的第一个元素,可以反转数组:

$rows = file('path/to/data.csv',FILE_IGNORE_NEW_LINES);
array_shift($rows);
pg_copy_from($db,'dest_table',$rows,',');

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...