Скопировать таблицу из одной базы данных в другую в Postgres - PullRequest
223 голосов
/ 07 июля 2010

Я пытаюсь скопировать всю таблицу из одной базы данных в другую в Postgres. Есть предложения?

Ответы [ 18 ]

251 голосов
/ 23 мая 2013

Извлеките таблицу и направьте ее напрямую в целевую базу данных:

pg_dump -t table_to_copy source_db | psql target_db
86 голосов
/ 17 сентября 2012

Вы также можете использовать функцию резервного копирования в pgAdmin II. Просто выполните следующие действия:

  • В pgAdmin щелкните правой кнопкой мыши таблицу, которую вы хотите переместить, выберите «Резервное копирование»
  • Выберите каталог для выходного файла и установите «Формат» в «обычный»
  • Откройте вкладку «Параметры дампа # 1», отметьте «Только данные» или «Только схема» (в зависимости от того, что вы делаете)
  • В разделе "Запросы" нажмите "Использовать вставки столбцов" и "Команды вставки пользователя".
  • Нажмите кнопку «Резервное копирование». Это выводит в файл .backup
  • Откройте этот новый файл с помощью блокнота. Вы увидите сценарии вставки, необходимые для таблицы / данных. Скопируйте и вставьте их в новую страницу базы данных sql в pgAdmin. Запустить как pgScript - Query-> Выполнить как pgScript F6

Хорошо работает и может создавать несколько таблиц одновременно.

66 голосов
/ 08 июля 2010

Использование dblink было бы удобнее!

truncate table tableA;

insert into tableA
select *
from dblink('dbname=postgres hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres',
            'select a,b from tableA')
       as t1(a text,b text);
26 голосов
/ 31 октября 2013

Использование psql на хосте linux, который подключен к обоим серверам

( export PGPASSWORD=password1 
  psql -U user1 -h host1 database1 \
  -c "copy (select field1,field2 from table1) to stdout with csv" ) \
| 
( export PGPASSWORD=password2 
  psql -U user2 -h host2 database2 \ 
   -c "copy table2 (field1, field2) from stdin csv" )
19 голосов
/ 15 апреля 2015

Сначала установить dblink

Затем вы сделаете что-то вроде:

INSERT INTO t2 select * from 
dblink('host=1.2.3.4
 user=*****
 password=******
 dbname=D1', 'select * t1') tt(
       id int,
  col_1 character varying,
  col_2 character varying,
  col_3 int,
  col_4 varchar 
);
13 голосов
/ 07 июля 2010

Используйте pg_dump для выгрузки данных таблицы, а затем восстановите их с помощью psql.

11 голосов
/ 18 августа 2016

Если у вас есть оба удаленных сервера, вы можете выполнить следующее:

pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase

Он скопирует упомянутую таблицу исходной базы данных в одноименную таблицу целевой базы данных, если у вас уже есть существующая схема.

8 голосов
/ 05 ноября 2016

Вот что у меня сработало.Первый дамп в файл:

pg_dump -h localhost -U myuser -C -t my_table -d first_db>/tmp/table_dump

, затем загрузите дамп-файл:

psql -U myuser -d second_db</tmp/table_dump
8 голосов
/ 24 марта 2018

Вы можете сделать следующее:

pg_dump -h <host ip address> -U <host db user name> -t <host table> > <host database> | psql -h localhost -d <local database> -U <local db user>

5 голосов
/ 09 ноября 2015

Чтобы переместить таблицу из базы данных A в базу данных B при локальной настройке, используйте следующую команду:

pg_dump -h localhost -U owner-name -p 5432 -C -t table-name database1 | psql -U owner-name -h localhost -p 5432 database2
...