Xpoint
   [напомнить пароль]

Postgres:Перенос таблицы из одной схемы в другую

Метки: [без меток]
2006-04-04 12:10:10 [обр] Андрей Пахомов(0/310)[досье]
День добрый
Возник такой вопрос: имеется база данных, в ней использовались 2 схемы: public, schema1, в каждой схеме было создано несколько таблиц. Поскольку на предлагаемом хостинге пользователь БД не имеет прав создавать схемы, возникла необходимость переноса всех таблиц в одну схему (public). В целом все имена таблиц не совпадают, так что конфиликтов быть не должно. Вопрос: как проще всего это сделать ? alter table ... rename не позволяет менять схему. Документация и поиск в интернете ничего путного не дали. Есть вариант с созданием пустых таблиц в нужной схеме, и копированием в них данных, но там возникает ряд проблем с индексами и ключами, в принципе они решаемы, но может есть способ проще ? Тупое изготовление дампа и правка в нем названий схем с последующим заливанием не прокатывает потому как в БД лежит масса бинарных данных и получаемый tar файл править сложно. Есть ли еще варианты ?
спустя 20 минут [обр] Роман Чемисов(0/350)[досье]

Андрей Пахомов[досье]

ALTER TABLE name
    SET SCHEMA new_schema

?

спустя 43 минуты [обр] Андрей Пахомов(0/310)[досье]

хм... Эта комманда насколько я понимаю, поддерживается только начиная с версии 8.1. У меня к сожалению, 8.0.2. В принципе, нашелся тут один вариант, он правда несколько хакерский, но работает:
Делаем:

select oid,* from pg_namespace;
  oid   |      nspname
--------+--------------------
 495554 | schema1
     99 | pg_toast
  16847 | pg_temp_1
     11 | pg_catalog
 495921 | pg_temp_7
  17057 | information_schema
   2200 | public

update pg_class set relnamespace=2200 where relnamespace=495554;

и все... Насколько я понимаю, данный способ будет работать даже в 7-ке.Единственно, что после этого прежде чем удалять ненужную схему, надо сначала сделать dump-restore, поскольку все таки где то там ссылки на таблицы остаются и при удалении схемы ее бывшие таблицы тоже удаляются.

Но все равно спасибо.

2 модератор: тему можно закрывать.

Powered by POEM™ Engine Copyright © 2002-2005