pg_copy_from() 输入的数组格式是什么?
What is the Array format of pg_copy_from()'s input?
我正在尝试使用 PHP 将 许多 个历史数据 CSV 文件加载到 PGSQL 服务器。我注意到 PHP 提供了一个 pg_copy_from()
函数用于将本地数据加载到远程服务器,但输入的确切格式不明确。
documentation 表示它需要一个行数组,每一行都是该行中值的分隔字符串。 PHP 的 file()
函数 returns 一个格式如所描述的数组,但将其输入 pg_copy_from() returns 时出现以下错误:
$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""
其中所有字符串值和字符串本身都用双引号引起来。我假设它正在尝试将整个字符串加载到我的 table 的第一列中,因此 col_2 无法加载的错误(因为没有 到 加载).
我对数组的假设是错误的还是分隔字符串需要不同的格式(如果是,如何)?
感谢任何help/tips!
如@Wolph 的评论所述 - 只需删除 $rows
数组的第一个元素,因为它包含 headers。要删除数组 array_shift
的第一个元素,可以使用 而无需 反转数组:
$rows = file('path/to/data.csv', FILE_IGNORE_NEW_LINES);
array_shift($rows);
pg_copy_from($db, 'dest_table', $rows, ',');
我正在尝试使用 PHP 将 许多 个历史数据 CSV 文件加载到 PGSQL 服务器。我注意到 PHP 提供了一个 pg_copy_from()
函数用于将本地数据加载到远程服务器,但输入的确切格式不明确。
documentation 表示它需要一个行数组,每一行都是该行中值的分隔字符串。 PHP 的 file()
函数 returns 一个格式如所描述的数组,但将其输入 pg_copy_from() returns 时出现以下错误:
$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""
其中所有字符串值和字符串本身都用双引号引起来。我假设它正在尝试将整个字符串加载到我的 table 的第一列中,因此 col_2 无法加载的错误(因为没有 到 加载).
我对数组的假设是错误的还是分隔字符串需要不同的格式(如果是,如何)?
感谢任何help/tips!
如@Wolph 的评论所述 - 只需删除 $rows
数组的第一个元素,因为它包含 headers。要删除数组 array_shift
的第一个元素,可以使用 而无需 反转数组:
$rows = file('path/to/data.csv', FILE_IGNORE_NEW_LINES);
array_shift($rows);
pg_copy_from($db, 'dest_table', $rows, ',');