PostgreSQL 13: создание пустой копии базы данных

#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();