Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Селективный рестор и схемы / 9 сообщений из 9, страница 1 из 1
26.06.2017, 17:31
    #39477878
Mark V. Lobanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Добрый день, коллеги!
Посоветуйте, пожалуйста, как решить вот такую задачку:
Делается дамп базы данных на одном сервере (PG9.6, Linux) вот так:
pg_dump.exe -v --file=db1_dump.tar --format=t --no-tablespaces --no-owner --username=postgres --dbname=db1 --host=host1

Походу отмечу, что несмотря на ключ --no-owner в дампе присутствуют CREATE TABLE public. history (...

Потом на другом сервере (PG9.6, Windows) я хочу восстановить одну (а в дальнейшем возможно и несколько таблиц) вот так
pg_restore.exe -v --table= history --format=t --dbname=db2 --no-owner --host=host2 -U pilotDWH < db1_dump.tar

написав при импорте --no-owner я надеялся, что импортёр проигнорирует указанного в дампе владельца и положит таблицу в ту схему (к примеру - schema1), владельцем которой является группа, в которую входит пользователь pilotDWH...однако и этого не произошло ((

пробовал импортировать с ключом --role=pilotDWH_group_role - результат тот же: таблица упорно оказывается в схеме public.

...или я упорно не вижу, где я ошибаюсь ((

Чего хотелось бы достичь: чтобы при импорте таблица оказалась в определённой схеме, скажем - schema1, а не в как на исходном сервере в public. Аналог REMAP_SCHEMA в утилите импорта impdp у Oracle.
Сервер host1 - чужой, host2 - мой и в схеме public у меня ничего лишнего лежать не должно.
...
Рейтинг: 0 / 0
26.06.2017, 18:00
    #39477904
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. Lobanov,

ещё одна жертва оракула

в отличии от оракула, в пж схема и овнер вещи разные.
совсем.

собственник задаётся как:
(alter table .... SET owner ....)
которое опускается при вашем способе опускания овнера.

вам надо
или выбрать дамп схемы, и в нем (дампе) вместо

SET search_path TO bla,....;
написать
SET search_path TO new_bla,....;

или
например восстановить вашу схему в какую--нть базульку, переименовать схему, в требуемую вами и ещё раз снять дамп, с нужными именами

или
придумать по вкусу
...
Рейтинг: 0 / 0
26.06.2017, 18:20
    #39477916
Mark V. Lobanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
qwwqMark V. Lobanov,

ещё одна жертва оракула


Ну чего сразу "жертва" ? Я бы ещё понял, если бы речь шла о FoxBase+ ... но не суть

qwwqв отличии от оракула, в пж схема и овнер вещи разные.
совсем.

Это мне понятно.
Мне нужно чтобы после импорта объект оказался в определённой схеме. Не найдя стандартного аналога REMAP_SCHEMA, я начал экспериментировать с владельцами.

Я также понимаю, что есть ALTER TABLE table_name SET SCHEMA new_schema, который можно выполнить после импорта, но мне за один шаг хочется.

Для того, чтобы иметь возможность восстанавливать отдельные таблицы, дамп сделан бинарный (tar), так что по нему не "походишь и поменяешь".

[skip]

qwwqили
например восстановить вашу схему в какую--нть базульку, переименовать схему, в требуемую вами и ещё раз снять дамп, с нужными именами

ну тогда уже проще делать set schema сразу после импорта
...
Рейтинг: 0 / 0
26.06.2017, 18:29
    #39477922
Mark V. Lobanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. LobanovПоходу отмечу, что несмотря на ключ --no-owner в дампе присутствуют CREATE TABLE public. history (...

Поправлюсь, CREATE TABLE с указанием схемы нет, но есть DROP TABLE public. history;
Однако, на резутат экспериментов это не влияет ((
...
Рейтинг: 0 / 0
26.06.2017, 19:01
    #39477946
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. Lobanov,

если я верно помню, вы можете ресторнуть ваш дамп в плоский файл. и выборочно тоже.
могу врать

а уж в плоском файле обредактироваться.
...
Рейтинг: 0 / 0
26.06.2017, 19:02
    #39477947
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. Lobanov,

Посмотрите вывод команды `pg_restore -l db1_dump.tar`. Будет список объектов в дамп-файле, в комментариях будут даны пути к объектам.
Также будет полезно посмотреть на вывод `pg_restore -s db1_dump.tar|less`, которая покажет вам то, как создаются объекты и как они потом “правятся” через ALTER-ы. В частности, через ALTER-ы меняются владельцы объектов.

Во всех ваших примерах объекты имеют префикс в виде схемы, никаких владельцев тут нет.
qwwq в данном случае прав — в PostgreSQL устройство схем отличается от такового в ORACLE.
...
Рейтинг: 0 / 0
27.06.2017, 08:55
    #39478138
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. LobanovДелается дамп базы данных на одном сервере (PG9.6, Linux) вот так:
pg_dump.exe -v --file=db1_dump.tar --format=t --no-tablespaces --no-owner --username=postgres --dbname=db1 --host=host1

Походу отмечу, что несмотря на ключ --no-owner в дампе присутствуют CREATE TABLE public. history (...



Цитата из документации:
автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
-O
--no-owner

    Do not output commands to set ownership of objects to match the original database. By default, pg_dump
issues ALTER OWNER or SET SESSION AUTHORIZATION statements to set ownership of created database objects.
These statements will fail when the script is run unless it is started by a superuser (or the same user that owns all
of the objects in the script). To make a script that can be restored by any user, but will give that user ownership
of all the objects, specify -O.

    This option is only meaningful for the plain-text format. For the archive formats, you can specify the option when you call pg_restore.

т.е. опция --no-owner при таком формате бесмысслена
...
Рейтинг: 0 / 0
27.06.2017, 09:12
    #39478153
Mark V. Lobanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Коллеги, спасибо за участие!

Может быть я в начале топика не слишком четко выразил то, что хотел сказать, а именно:
1) я хотел получить стандартный аналог оракловского REMAP_ SCHEMA при импорте (НЕ замену владельца!), т.е. в один этап
2) не ставлю под сомнение утверждение qwwq о том, что устройство схем PG отличается от такового в ORACLE
3) по совету vyegorov посмотрел вывод pg_restore -l ..., но мне это, к сожалению, не дало информации, как решить задачу 1)
4) совет qwwq про конвертацию дампа bin -> sql услышал, спасибо

Итого: я правильно вас понял, что стандартного решения задачи 1) нет?

Если таки да, то IMHO как наименее затратное решение: на первом этапе - импорт таблицы в public, на втором - ALTER TABLE table_name SET SCHEMA new_schema через psql

Скажите своё мнение, пожалуйста.
...
Рейтинг: 0 / 0
27.06.2017, 09:28
    #39478168
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Селективный рестор и схемы
Mark V. LobanovКоллеги, спасибо за участие!

Может быть я в начале топика не слишком четко выразил то, что хотел сказать, а именно:
1) я хотел получить стандартный аналог оракловского REMAP_ SCHEMA при импорте (НЕ замену владельца!), т.е. в один этап
2) не ставлю под сомнение утверждение qwwq о том, что устройство схем PG отличается от такового в ORACLE
3) по совету vyegorov посмотрел вывод pg_restore -l ..., но мне это, к сожалению, не дало информации, как решить задачу 1)
4) совет qwwq про конвертацию дампа bin -> sql услышал, спасибо

Итого: я правильно вас понял, что стандартного решения задачи 1) нет?

Если таки да, то IMHO как наименее затратное решение: на первом этапе - импорт таблицы в public, на втором - ALTER TABLE table_name SET SCHEMA new_schema через psql

Скажите своё мнение, пожалуйста.

Да все верно.

--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Селективный рестор и схемы / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]