172 похожих чатов

Друзья, как лучше в postgresql скопировать данные из одной db.table

в другую db.table, с учетом того, что эти бд находятся в одном кластере?

15 ответов

26 просмотров

pg_dump, fdw, dblink. Сильно других опцый нет.

whois- Автор вопроса
Ilya Anfimov
pg_dump, fdw, dblink. Сильно других опцый нет.

Вопрос. А нельзя ли это сделать запросами? Типо INSERT INTO db2.table2 ( SELECT FROM db1.table1) CONCURENTLY?

whois- Автор вопроса
Дмитрий Лукьянов
Через copy ещё

Есть проблема с COPY. Если делать COPY, то команда будет падать, когда столкнется с похожими id-шниками. Т.е. во второй таблице есть часть данных(свеженькие), которые присутствуют в обеих таблицах.

whois
Есть проблема с COPY. Если делать COPY, то команда...

Как я люблю, когда ТЗ обретает новые подробности в процессе решения задачи. Какие ещё неозвученные нюансы существуют? 🤷‍♂️🤦‍♂️

whois- Автор вопроса
Дмитрий Лукьянов
Как я люблю, когда ТЗ обретает новые подробности в...

Сорян, про это забыл сказать. Что во второую таблицу переодически добавляются новые данные, которые также добавляются в первую. Т.е. по идее, в первой таблице есть несколько миллионов строк, которые отсутствуют во второй. Т.к. добавлены раньше. И, получается, что надо как-то между базами данных выделить эти несколько миллионов запписей. SELECT * FROM t1 JOIN t2 ON t1.id != t2.id; И это дело скопировать с помощью COPY в файл, например. Затем закинуть во вторую таблицу с помощью COPY. Но есть одно НО! Данных дофига. И, если сделать COPY, я боюсь это заблокирует таблицу t1 и положит все. Т.е. хотелось бы это сделать конкурентно.

whois
Сорян, про это забыл сказать. Что во второую табли...

Ну, можно сперва через copy скопировать одну таблицу в другую БД целиком, положить рядом со второй под другим именем. А затем обычными запросами делать с данными все, что надо. Тут же перенос данных и их обработка - это независимые этапы. Декомпозируйте.

whois- Автор вопроса
Дмитрий Лукьянов
Ну, можно сперва через copy скопировать одну табли...

Скажите плз, а COPY блокирует таблицу? Или берет самую не приоритетную блокировку?

whois
Скажите плз, а COPY блокирует таблицу? Или берет с...

А в чем проблема блокировок? У вас переносимая таблица ещё и обновляться продолжает? А что вы будете делать с дельтой по данным, накопленным с момента выгрузки? Вы уже ответили на этот вопрос? Это ещё один нюанс?

whois- Автор вопроса
Дмитрий Лукьянов
А в чем проблема блокировок? У вас переносимая таб...

Возможно я плохо объяснил. Смотри есть 2 таблицы в разных бд. В обще таблицы сыпятся одни и те же данные, но первая таблица появилась раньше и у нее в начале есть несколько лямов записей, которые отсутствуют во второй таблице, соответстввенно. Ведь вторая появилась позже и в нее данные стали добавляться позже. Т.е. допустим с записи id=99000000 обе таблицы идентичны и дельты не может быть, т.к. даныне в обе добавляются одни и те же. Но первые 99000000 записей присутствуют в таблице t1, но отсутствуют в таблице t2/

whois
Возможно я плохо объяснил. Смотри есть 2 таблицы в...

Тогда в той бд, где записи есть, создайте через create table as select таблицу с выгрузкой нужных записей, и перенесите ее в целевую бд.

whois
Вопрос. А нельзя ли это сделать запросами? Типо IN...

Через fdw -- можно. Да и через dblink в общем тожэ. Вы, кстати, точно базы и схемы не путаете? А то db2.table2 -- это синтаксис для обращения к таблицэ table2 в схеме db2, совсем другое дело.

whois
Сорян, про это забыл сказать. Что во второую табли...

Вообще, COPY блокирует только DDL (изменение схемы таблицы) и вымарывание старых туплов вакуумом (зато вот это -- во всей базе).

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта