#postgresql #amazon-rds
#postgresql #amazon-rds
Вопрос:
У меня есть сервер AWS RDS PostgreSQL 13 с некоторыми базами данных. Мне нужно создать пустую копию одной базы данных (пустая схема означает (таблицы, представления, функции) безопасность (пользователи, роли)).
Это pg_dump -s
то, что я ищу?
Спасибо!
Комментарии:
1. Должен был спросить, хотите ли вы создать новую базу данных в существующем кластере или в новом?
2. на существующем сервере (сервере) на данный момент, однако запрос на создание реплики в новом кластере скоро поступит
3. Если вы делаете это в существующем кластере, было бы лучше использовать ответ @BryanST25, в противном случае вам потребуется переименовать ссылки на базу данных в файлах дампа.
4. да, понял, но ответ @ Bryan также будет включать данные, не так ли?
5. Да, я забыл об этом.
Ответ №1:
pg_dump -d db_name -s
. Вам также нужно будет сделать pg_dumpall -g
, чтобы получить глобальные данные, например, роли. При этом будут получены все глобальные данные для кластера Postgres, поэтому у вас может быть больше, чем нужно для конкретной базы данных.
Ответ №2:
Postgres позволяет использовать любую существующую базу данных на сервере в качестве шаблона при создании новой базы данных. Я не уверен, предоставляет ли pgAdmin вам опцию в диалоговом окне создания базы данных, но вы должны иметь возможность выполнить следующее в окне запроса, если это не так:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Тем не менее, вы можете получить:
ERROR: source database "originaldb" is being accessed by other users
Чтобы отключить всех других пользователей от базы данных, вы можете использовать этот запрос:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();