【问题标题】:travis-ci postgres `SELECT EXISTS` query return different resulttravis-ci postgres `SELECT EXISTS` 查询返回不同的结果
【发布时间】:2016-12-06 06:54:53
【问题描述】:

我正在使用 pg-promise 进行一些测试,涉及删除一个表并重新创建一个表。

所有测试都在我的本地机器上通过。但是在travis-ci上,似乎跳过了所有DROP TABLE ... SQL,导致测试失败。

有人知道为什么吗?是权限问题吗?

有没有办法让我进一步调试,比如连接到travis-ci postgres 服务器?

更新:我没有放任何代码,因为所有测试都通过我的本地环境,所以我认为这只是一个travis-ci 问题。以下是我认为traivs-ci 正在跳过的部分。

  afterEach('cleanup tables', (done) => {
    db.none('DROP TABLE $1~', 'syncTest')
    .then(done)
    .catch(() => done());
  });

  beforeEach('cleanup tables', (done) => {
    db.none('DROP TABLE $1~', 'syncTest')
    .then(done)
    .catch(() => done());
  });

Update2:经过进一步测试,原来测试失败是因为

db.one('SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name=$1)', [tableName])

没有返回预期值。该查询在 travis 上返回 { '?column?': false },但在我的本地环境中返回 { exists: false }

这是travis-ci 的问题吗?还是 postgres 版本问题?

【问题讨论】:

  • 一个通常包含一些代码;)
  • @vitaly-t 我添加了一些可能相关的代码。
  • @vitaly-t 如果您有更多时间调查,这里是 repo。 github.com/xiaofan2406/pglize

标签: postgresql travis-ci pg-promise


【解决方案1】:

很可能是因为您的测试序列是错误的,它受到竞争条件的影响,您只能在 Travis Ci 上看到这种情况,因为它在运行测试时比您的本地机器忙得多。

首先,尝试将您的DROP TABLE name 替换为DROP TABLE IF EXISTS name

然后你可以尝试使用CREATE TABLE IF NOT EXISTS name...

【讨论】:

  • 谢谢,您帮我找出问题的原因
  • @xiaofan2406 你想接受答案还是发表你自己的答案?
猜你喜欢
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2011-11-08
  • 2020-07-09
  • 2021-11-27
  • 1970-01-01
  • 2014-02-20
相关资源
最近更新 更多