使用PostgreSQL的“权限被拒绝”在Travis-CI中复制
问题描述:
我使用travis-ci.org来测试Node.js模块。 它使用最新的pg包来访问PostgreSQL数据库。使用PostgreSQL的“权限被拒绝”在Travis-CI中复制
集成测试需要使用的Postgres copy
命令(从事务中...不是psql的\copy
)来填充一些CSV数据的临时表。 一切都通过本地 ...但特拉维斯-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:[email protected]:5432
以及与该井。 有一件事,我确实需要的PostgreSQL V9.6,所以我.travis.yml
文件看起来像:
language: node_js
node_js:
- "6"
services:
- postgresql
addons:
postgresql: "9.6"
sudo: false
dist: trusty
......这在过去一直伟大的工作,但是这是我第一次过使用copy
。
我想这与Postgres以某种方式运行的任何用户有关?
任何帮助非常感激地收到!
添
答
我居然遇到了这个问题,当时我正致力于在其上使用旧特拉维斯基础设施继承的代码库(基于Ubuntu准确),并希望将其更新为可信赖的。
基于Precise的映像从travis主目录中读取文件没有问题 - 也许PostgreSQL服务器运行的是travis
用户,而不是postgres
,但在Trusty上并不是这样,我得到了这个错误。
使用chmod
对文件本身是不够的,服务器仍然无法从travis
主目录读取。因此,您可以使用mktemp
创建文件,将文件复制到该文件,然后使用chmod
将这些权限更改为666
。现在你可以使用PostgreSQL COPY FROM
来阅读它。
谢谢@MichielB,工作的魅力! –