DBLink 查询即使在完成后也不会终止
DBLink query doesn't terminate even after it completes
我有一个 Dblink 查询 Amazon RDS (Postgres),它使用来自 Amazon Redshift 集群的行执行 INSERT。
查询在 15/20 分钟后终止,如果不是更多的话,但我可以看到所有行都在几分钟后被插入。
我 运行 通过 JetBrains 的 DataGrip 处理这些查询。
同一连接上的其他一些类似的 dblink,按预期终止。
我看到的唯一区别是 table 的大小,在第一种情况下更大。
所有这些查询都是简单地复制整个 table。差不多像这样:
insert into rds_table(
select *
from db_link('foreign_server',
$REDSHIFT$
select *
from redshift_table
$REDSHIFT$) as table_n(...)
);
其中 "foreign server" 是我与 Redshift 的联系。
我知道查询已完成,因为 rds_table 的行数与 redshift_table.
的行数相同
DataGrip 显示查询仍为 运行ning:
并且在我手动停止查询之前不会让我 运行 其他查询。
如果我这样做,插入的行将保留在数据库中,这意味着事务已经提交。
为什么会这样?是 DataGrip 还是 Postgres 的问题?
我该如何解决?
有没有其他更好的方法可以将数据从 Redshift 迁移到 RDS?
如果并发事务已经可以看到插入的数据,则意味着插入事务和因此 INSERT
语句必须已经完成。
如果 DataGrip 显示语句仍然 运行,那是在骗你。
所以这一定是 DataGrip 错误。
我有一个 Dblink 查询 Amazon RDS (Postgres),它使用来自 Amazon Redshift 集群的行执行 INSERT。 查询在 15/20 分钟后终止,如果不是更多的话,但我可以看到所有行都在几分钟后被插入。 我 运行 通过 JetBrains 的 DataGrip 处理这些查询。
同一连接上的其他一些类似的 dblink,按预期终止。 我看到的唯一区别是 table 的大小,在第一种情况下更大。
所有这些查询都是简单地复制整个 table。差不多像这样:
insert into rds_table(
select *
from db_link('foreign_server',
$REDSHIFT$
select *
from redshift_table
$REDSHIFT$) as table_n(...)
);
其中 "foreign server" 是我与 Redshift 的联系。 我知道查询已完成,因为 rds_table 的行数与 redshift_table.
的行数相同DataGrip 显示查询仍为 运行ning:
并且在我手动停止查询之前不会让我 运行 其他查询。 如果我这样做,插入的行将保留在数据库中,这意味着事务已经提交。
为什么会这样?是 DataGrip 还是 Postgres 的问题? 我该如何解决?
有没有其他更好的方法可以将数据从 Redshift 迁移到 RDS?
如果并发事务已经可以看到插入的数据,则意味着插入事务和因此 INSERT
语句必须已经完成。
如果 DataGrip 显示语句仍然 运行,那是在骗你。
所以这一定是 DataGrip 错误。