Копировать результаты из представления PostgreSQL в одной БД в таблицу в другой - PullRequest
4 голосов
/ 05 ноября 2011

Полная версия PostgreSQL.

У меня есть 7-8 представлений данных в db1, которые мне нужно скопировать в таблицы с соответствующими схемами (схемами?) В другой базе данных, db2. База данных назначения может быть одним и тем же экземпляром PostgreSQL или вообще находиться в другом окне.

Я знаю 2-3 разных способа сделать это с базами данных, с которыми я знаком, но я беспомощен в этом. Может кто-нибудь предложить мне несколько основных стратегий?

В идеальном мире я бы предпочел не делать ничего, что кажется слишком ETL - я бы предпочел сделать что-то вроде

SELECT FROM instance1.db1.viewname INTO instance2.db5.tablename

затем выведите данные из представления в виде текстового файла и перезагрузите в таблицу назначения.

Поскольку я не знаю PostgreSQL, я действительно не знаю, что находится в пределах возможной области.

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011

Вам не нужно создавать временную таблицу для COPY TO.Любой запрос может быть источником , так как PostgreSQL 8.2 .

COPY (SELECT * FROM view1) TO '/var/lib/postgres/myfile1.csv';

Прочтите руководство о COPY .Создайте необходимые таблицы локально с помощью

CREATE table tbl1 AS
SELECT * FROM view1
LIMIT 0;   -- no data, just the schema.

Скопируйте инструкции DDL и создайте все таблицы в целевой базе данных. pgAdmin - это один удобный графический интерфейс для этого.Удалите пустые таблицы в исходной базе данных еще раз.Загрузка данных с помощью

COPY tbl1 FROM '/var/lib/postgres/myfile1.csv';

Дамп / восстановление, как описывает @wildplasser, это другой способ.

Для одноразовой передачи рекомендуется один из этих методов.Для многократного применения может подойти dblink или SQL / MED (управление внешними данными) .

3 голосов
/ 05 ноября 2011
CREATE TEMPORARY TABLE mytmp
AS SELECT * from myview
WHERE 1=1
;


COPY mytmp TO '/tmp/test.csv'
;

Еще лучший способ:

  • копировать представления в таблицы (создать таблицу1 как select * from view1; ...)
  • используйте pg_dump -t table1 -t table2 ... mydbname> myfile.out
  • используйте myfile.out для воссоздания и заполнения таблиц.
...