在Travis-CI中使用PostgreSQL COPY时出现“Permission denied”错误

3

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

集成测试需要使用Postgres copy命令(在事务内部...而不是psql的\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是个问题。我的 Linux 技能有限,但我知道那个位置上的文件是存在的。我尝试使用chmod将其改为777,但没有任何效果。

我正在使用以下字符串连接到 Travis 上的 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运行的用户有关?

非常感谢任何帮助!

Tim

1个回答

1

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

Precise版本的映像没有问题从travis主目录中读取文件 - 可能PostgreSQL服务器正在运行作为travis用户,而不是postgres,但在Trusty上不是这种情况,我得到了这个错误。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接