travis-ci postgres`ELES EXISTS`查询返回不同的结果

时间:2016-12-01 22:32:48

标签: postgresql travis-ci pg-promise

我正在进行一些测试,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版本问题?

1 个答案:

答案 0 :(得分:1)

很可能是因为你的测试序列是错误的,这是一个竞争条件,你只能在Travis Ci上看到它,因为它在运行测试时比你的本地机器更繁忙。

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

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