"Permission denied" 在 Travis 中使用 PostgreSQL COPY-CI

"Permission denied" using PostgreSQL COPY in Travis-CI

我正在使用 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 的用户 运行 有某种关系?

非常感谢收到任何帮助!

蒂姆

我实际上 运行 在处理使用旧 Travis 基础架构(基于 Ubuntu Precise)的继承代码库并想将其更新为 Trusty 时遇到了这个问题。

基于 Precise 的图像从 travis 主目录读取文件没有问题 - 也许 PostgreSQL 服务器是 运行 作为 travis 用户,而不是 postgres,但是在 Trusty 上,情况并非如此,我得到了这个错误。

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

阅读它