DBLink查询即使完成也不会终止

时间:2019-10-17 08:29:21

标签: postgresql amazon-redshift amazon-rds dblink datagrip

我有一个Dblink查询Amazon RDS(Postgres),该查询对来自Amazon Redshift集群的行执行INSERT。 该查询将在15/20分钟(如果不是更多)之后终止,但是我可以看到仅在几分钟之后就插入了所有行。 我正在通过JetBrains的DataGrip运行这些查询。

同一连接上的某些其他类似的dblink,按预期终止。 我看到的唯一区别是表的大小,在第一种情况下更大。

所有这些查询只是在复制整个表。差不多是这样的:

insert into rds_table(
  select *
  from db_link('foreign_server',
    $REDSHIFT$
      select *
      from redshift_table
    $REDSHIFT$) as table_n(...)
);

“外部服务器”是我与Redshift的连接。 我知道查询已完成,因为rds_table与redshift_table具有相同的行数。

DataGrip显示查询仍在运行: DataGrip screenshot

,除非手动停止查询,否则不允许我运行其他查询。 如果这样做,插入的行将保留在数据库中,这意味着事务已经提交。

为什么会这样? DataGrip或Postgres是否有问题? 我该如何解决?

是否还有其他更好的方法可以将数据从Redshift迁移到RDS?

1 个答案:

答案 0 :(得分:1)

如果并发事务已经可以看到插入的数据,则意味着插入事务以及INSERT语句必须已经完成。

如果DataGrip显示该语句仍在运行,则说明您在撒谎。

所以这一定是DataGrip的错误。