我只是尝试使用PHP脚本导入一些数据。从postgres帐户,我可以运行脚本。从以postgres登录的psql中,我可以运行脚本。
这是在Ubuntu 14.04上运行的PostgreSQL 9.6。
-- works
\COPY mcl_import.mcl_user_mapping_tmp (mcl_id,user_id) FROM program '/usr/bin/php -f /var/yadda/yadda/user-import.php' WITH (FORMAT CSV,DELIMITER ',',NULL '[NULL]',header FALSE )
-- fails
COPY mcl_import.mcl_user_mapping_tmp (mcl_id,header FALSE );
-- ERROR: program "/usr/bin/php -f /var/yadda/yadda/user-import.php" failed
-- DetaIL: child process exited with exit code 255
为此测试了访问限制,并且效果很好。
COPY testing FROM program 'more /var/yadda/yadda/user-import.php' WITH (DELIMITER E'\f');
通过输出此版本信息来测试PHP,它可以正常工作。
COPY testing FROM program 'php -v' WITH (DELIMITER E'\f');
确保它与postgres一起运行。
COPY testing FROM program 'whoami' WITH (DELIMITER E'\f');
总结:
- \ COPY有效
- COPY不
- 它以用户postgres的身份运行
- 用户postgres有权访问文件
- 用户postgres有权访问并可以运行php命令
我将独立运行此脚本,但这是更大的迁移过程的一部分。