Як я можу скопіювати свою public
схему в ту саму базу даних із повною структурою таблиці, даними, функціями, fk, pk тощо.
Моя версія Postgres становить 8,4
PS мені потрібно скопіювати схему НЕ базу даних
Як я можу скопіювати свою public
схему в ту саму базу даних із повною структурою таблиці, даними, функціями, fk, pk тощо.
Моя версія Postgres становить 8,4
PS мені потрібно скопіювати схему НЕ базу даних
Відповіді:
Немає простого способу зробити це в самому pg_dump / pg_restore. Ви можете спробувати наступне, якщо ви зможете тимчасово видалити базу даних.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Найпростіше, як суперпользователь ( postgres
), без peer
авторизації в pg_haba.conf
. Відновлення після перейменування оригінальної схеми: psql my_db -f '/path/to/file.pgsql'
. Якщо у вас є звичайний дамп SQL, вам це не потрібно pg_restore
.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Якщо ви застрягли в php, тоді використовуйте будь-які тики
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
або команда exec (). Для зміни ви можете використовувати sed таким же чином.
Ось ще 6 символів
public
).
За допомогою pgAdmin можна зробити наступне. Це досить керівництво, але може бути все, що вам потрібно. Підхід на основі сценарію був би набагато бажанішим. Не впевнений, наскільки добре це буде працювати, якщо у вас немає доступу адміністратора і якщо ваша база даних велика, але ви повинні працювати чудово на базі даних про розробку, яку ви просто маєте на локальному комп'ютері.
Клацніть правою кнопкою миші назву схеми, яку потрібно скопіювати, і натисніть Резервне копіювання. (Ви можете піти глибше, ніж це, і вибрати просто резервне копіювання структури замість обох).
Дайте ім’я файлу резервного копіювання, а також виберіть формат. (Я зазвичай використовую Тар.)
Натисніть Резервне копіювання.
Клацніть правою кнопкою миші схему, з якої ви створили резервну копію, і натисніть властивості та тимчасово перейменуйте її на щось інше. (напр. temprename )
Клацніть корінь схеми та клацніть правою кнопкою миші в браузері об’єктів, а потім натисніть кнопку Створити нову схему та надайте схемі ім'я загальнодоступним . Це буде схема, яку ви копіюєте з резервної копії.
Клацніть правою кнопкою миші нову загальнодоступну схему на кроці 5. та натисніть кнопку "Відновити". Відновити з резервного файлу на кроці 3.
Перейменуйте нову загальнодоступну схему на іншу назву (наприклад, новина ).
Перейменуйте схему зміни режиму перейменування від кроку 4 до початкового імені.
Ви можете використовувати
CREATE DATABASE new_db TEMPLATE = old_db;
Потім відкиньте всі схеми, які вам не потрібні:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
Єдиним недоліком є те, що всі підключення до old_db повинні бути визначені, перш ніж ви зможете створити копію (таким чином, процес, який виконує CREATE DATABASE
оператор, повинен підключитися, наприклад, до template1)
Якщо це не варіант, pg_dump / pg_restore - єдиний спосіб зробити це.
розширення на відповідь користувача1113185 , ось повний робочий процес за допомогою psql / pg_dump.
Нижче експортуються всі об'єкти old_schema
та імпортуються їх у нову new_schema
схему, як user
, у dbname
базі даних:
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public
?