我有一个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或Postgres是否有问题? 我该如何解决?
是否还有其他更好的方法可以将数据从Redshift迁移到RDS?
答案 0 :(得分:1)
如果并发事务已经可以看到插入的数据,则意味着插入事务以及INSERT
语句必须已经完成。
如果DataGrip显示该语句仍在运行,则说明您在撒谎。
所以这一定是DataGrip的错误。