php - pg_copy_from() 的输入的数组格式是什么?
问题描述
我正在尝试使用 PHP 将许多CSV 历史数据文件加载到 PGSQL 服务器。我注意到 PHP 提供了一个pg_copy_from()
将本地数据加载到远程服务器的功能,但是输入的确切格式是模糊的。
文档说它需要一个行数组,每行是该行中值的分隔字符串。PHP 的file()
函数以所述格式返回一个数组,但将其输入 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, ',');
推荐阅读
- c# - 如何包装 POST 请求的正文以便能够发送受限字符
- javascript - 如何在 javascript 中使用 64BIT UNSIGNED LONG LONG TYPE
- angular - 角度本地化 formControlName,千位点符号和十进制逗号中的数字
- mysql - 休眠转义“:”字符
- sql - 为什么sql在引发错误后执行语句?
- powershell - PowerShell 循环遍历用户名
- python-3.x - 如何从python中的字符串列表中删除â\xa0
- php - woocommerce 上传中不允许使用 .jpeg 文件类型
- javascript - JSPDF pdf文件未在adobe中打开但在chrome中打开
- c# - 暂停在 xaml 应用程序中运行 exe 文件的进程