嗨,我正在尝试使用 PHP (Laravel) 中的 COPY 命令
DB::statement("COPY table_name FROM '".$file."' WITH DELIMITER ',' CSV HEADER")
但如果因为superuser
权限失败:
必须是超级用户或 pg_read_server_files 角色的成员才能从文件复制
提示:任何人都可以复制到标准输出或标准输入。psql 的 \copy 命令也适用于任何人
所以我试图找到如何用STDIN
PHP做同样的事情,但只从命令行找到了例子。
所以我正在研究如何将 COPY 与 STDIN 与 PHP 一起使用?或者也许有另一种方法可以批量插入 50K+ 记录。
PS 我无法superuser
向用户添加角色,因为数据库托管在 DigitalOcean 上,他们拒绝授予superuser
访问权限。
STDIN
是指向文件的指针。参见stdin(3) - Linux 手册页:
这些符号中的每一个都是指向FILE类型指针的stdio(3)宏,并且可以与fprintf(3)或fread(3)等函数一起使用。
因此,您可以STDIN
作为文件打开。
<?php
$stdin = fopen('php://stdin', 'r');
DB::statement("COPY table_name FROM '".$stdin."' WITH DELIMITER ',' CSV HEADER")
?>
PS DO 的安全团队是对的:您不应将superuser
角色用于常规任务。无论是在 DO 的服务器上还是在其他任何地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句