"许可被拒绝"在Travis-CI中使用PostgreSQL COPY

时间:2017-06-16 20:05:52

标签: node.js postgresql csv travis-ci pg

我使用 travis-ci.org 来测试Node.js模块。 它使用最新的pg包来访问PostgreSQL数据库。

集成测试需要使用Postgres copy命令(来自事务内...而不是psql' s \copy)来填充一些带有 CSV的临时表数据。 一切都在本地传递 ......但在Travis-CI上运行我正在点击:

"COPY some_table(column_a,column_b) FROM 
'/home/travis/build/my_org/my_repo/test/fixtures/some_file.csv' CSV HEADER;"
{ error: could not open file 
"/home/travis/build/my_org/my_repo/test/fixtures/some_file.csv" for reading: 
Permission denied
    at Connection.parseE 
(/home/travis/build/my_org/my_repo/node_modules/pg/lib/connection.js:567:11)
    at Connection.parseMessage   name: 'error',
...

所以文件Permission denied就是这样。我的noob Linux技能告诉我该位置的文件存在。我已经尝试chmod将其发送到777,但这并没有任何效果。

我使用字符串连接到特拉维斯的Postgres:

postgres://postgres:postgres@localhost:5432

所有人都很好。 有一点,我确实需要PostgreSQL V9.6 ,所以我的.travis.yml文件看起来像:

language: node_js

node_js:
  - "6"

services:
  - postgresql

addons:
  postgresql: "9.6"

sudo: false
dist: trusty

......过去效果很好,但这是我第一次使用copy

我想这与Postgres以某种方式运行的任何用户有关?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

当我正在使用旧的Travis基础架构(基于Ubuntu Precise)并希望将其更新为Trusty的继承代码库时,我遇到了这个问题。

基于精确的图像从travis主目录读取文件没有问题 - 可能PostgreSQL服务器作为travis用户运行,而不是postgres,但在Trusty上这不是我得到了这个错误。

在文件本身上使用chmod是不够的,服务器仍然无法从travis主目录中读取。因此,您可以使用mktemp创建文件,将文件复制到该文件,使用666将这些权限更改为chmod。现在,您可以使用PostgreSQL COPY FROM来阅读它。