Запрос DBLink не прекращается даже после его завершения - PullRequest
0 голосов
/ 17 октября 2019

У меня есть запрос Dblink Amazon RDS (Postgres), который выполняет INSERT со строками из кластера Amazon Redshift. Запрос завершается через 15/20 минут, если не больше, но я вижу, что все строки вставляются через несколько минут. Я выполняю эти запросы через DataGrip JetBrains.

Некоторые другие похожие 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 Ответ

1 голос
/ 18 октября 2019

Если параллельная транзакция уже может видеть вставленные данные, это означает, что транзакция вставки и, следовательно, оператор INSERT должны быть уже завершены.

Если DataGrip показывает оператор как все еще работающий, он лжетвам.

Так что это должно быть ошибка DataGrip.

...