Как удалить базу 1с с сервера postgresql
Для подключения к базе данных PostgreSQL понадобится установленный PostgreSQL клиент:
Для установки PostgreSQL сервера:
Проверим, можем ли мы подключиться к базе данных PostgreSQL:
Вывод команды должен быть примерно таким:
PostgreSQL Подключение, Пользователи (Роли) и Базы Данных
Логин в только что установленный postgreSQL сервер нужно производить под именем пользователя postgres:
Для подключения к базе данных PostgreSQL можно использовать команду:
Если такая команда не просит ввести пароль пользователя, то можно еще добавить опцию -W.
После ввода пароля и успешного подключения к базе данных PostgreSQL, можно посылать SQL-запросы и psql-команды.
PostgreSQL создание новой роли и базы данных
Создать новую роль c именем admin (указывайте нужное имя):
Создание новой базы данных:
Дать права роли на базу данных:
Включить удаленный PostgreSQL доступ для пользователей
Нам нужно отредактировать файл /etc/postgresql/<VERSION>/main/pg_hba.conf, задав опцию md5 вместо peer.
<VERSION> может быть 10, 11, 12 и т.д.
После этого сделать restart PostgreSQL:
Полезные команды PostgreSQL
Выйти из клиента PostgreSQL:
\q
Показать список баз данных PostgreSQL:
\l
Показать список таблиц:
\dt
Показать список пользователей (ролей):
\du
Показать структуру таблицы:
Переименовать базу данных:
Удалить базу данных:
Изменить текущую базу данных в PostgreSQL (вы не сможете переименовать или удалить текущую базу данных):
\connect db_name или более короткий alias: \c db_name
Удалить роль (пользователя):
Роль не будет удалена, если у нее есть привелегии - возникнет ошибка ERROR: role cannot be dropped because some objects depend on it .
Нужно удалить привелегии у роли, например если нужно удалить роль admin2, нужно выполнить последовательность комманд с Drop Owned:
Дать права пользователю/роли на логин ( role is not permitted to log in ):
Выбор shema psql в консоли:
Посмотреть список всех схем:
Подключиться к конкретной схеме:
Sequences
Получить имена всех созданных sequences:
Получить последнее значение sequence, которые будет присвоено новой вставляемой в таблицу записи:
Я пишу приложение микросервиса, в котором есть контейнер докеров для базы данных postgres. Я знаю, что при сбросе SQL в базу данных мы используем эту команду docker в терминале:
cat <dump sql file> | docker exec -i <container ID> psql -U <postgres username> <database name>
Мне было интересно, есть ли аналогичная команда docker терминала linux, которую я могу запустить извне контейнера, чтобы:
Создать базу данных с именем
Удалить базу данных с именем
- Удалите все таблицы, чтобы сделать его полностью пустым за одну команду.
Обратите внимание, что я должен иметь возможность запускать команду docker извне контейнера через терминал ОС хоста (linux).
Любые предложения будут оценены. Заранее спасибо.
2 ответа
Если в вашем вопросе есть cat <dump sql file> , вы можете поместить все, что угодно, что выводит команды SQL на стандартный вывод; который включает echo DROP DATABASE . .
Помните, что вы можете использовать обычный клиент PostgreSQL для взаимодействия с сервером PostgreSQL, независимо от того, работает он в Docker или нет. (Для этого требуется, чтобы вы опубликовали порт базы данных извне, обычно с параметром docker run -p5432:5432 или аналогичным.) Вам не нужен доступ корневого уровня на хосте или корневая оболочка на сервере базы данных, просто для запуска команды базы данных.
Эта команда оболочки отбрасывает именованную базу данных на экземпляр PostgreSQL, работающий на текущем хосте; или, если он не на текущем хосте или на порту по умолчанию, вы можете установить < > и PGPORT переменные среды.
Хранилище Postgres локально для контейнера? Если это так, то удаление контейнера и его воссоздание приведет к сбросу вашей БД. Если ваши данные подключены из локальной или сетевой папки, то их сброс означает выполнение команд на psql
У вас есть несколько вариантов:
docker exec -it <container-id> /bin/sh
А затем запустите psql и делайте все, что хотите, в командной строке psql.
docker exec -it <container-id> psql -U <username> -d <database-name>
- установите psql локально и запустите его для доступа к экземпляру postgres в докере
psql -U <username> -h localhost
К сожалению, вы не можете УДАЛИТЬ и СОЗДАТЬ базу данных с помощью одной и той же команды, но вы можете запустить 2 отдельные команды
docker exec -it <container-id> psql -U <username> -d postgres -c "DROP DATABASE <dbname>;"
docker exec -it <container-id> psql -U <username> -d postgres -c "CREATE DATABASE <dbname>;"
Особенно базы «среднего» и «большого» размера, с которыми интенсивно работают пользователи в 1С.
В этой статье мы подробно разберем этот вопрос, и дадим конкретный ответ на него!
Хорошо, что весь процесс по обслуживанию баз 1С на PostgreSQL, можно выполнять с помощью утилиты pgAdmin 4.
Используя утилиту, мы экономим много времени, новички не «парятся» командами, передачей нужных параметров, ничего не пишут «руками» в консоли.
Конечно, данная тема также подымается и на курсе: Администратор 1С!
pgAdmin 4 существенно упрощает этот процесс!
(К слову вот первая и вторая часть статьи).
Где искать инструменты по обслуживанию баз данных в pgAdmin 4 ?
Перед нами откроется окно в котором нам доступны различные настройки по обслуживанию базы данных.
pgAdmin 4, как и в случаи с резервным копированием и восстановлением баз, также лишь запускает эти команды на выполнение с нужными параметрами. (другими словами, упрощает новичку процессы по обслуживанию баз данных).
Но прежде, чем мы подробно разберем все эти инструменты по обслуживанию баз в pgAdmin 4, стоит дать ответ на такой вопрос:
Если взять среднюю базу 1С в
30 Гб которая работает на сервере PostgreSQL и посмотреть так сказать на нее из «внутри», то мы увидим многие избыточные записи их еще называю «мусорные».
Откуда они берутся и что это за записи?
1. «Мусор»
Дело в том, что PostgreSQL самостоятельно не блокирует при изменении данных таблицы и записи от читающих транзакций, этим занимается сам сервер 1С «Кластер серверов».
Эти записи лишь «мусор», который скапливается в базе и зря расходует дисковое пространство.
На больших базах, с которыми интенсивно работают пользователи (где много транзакций) это хорошо заметно, базы «распухают» и падает производительность.
Как от него избавится ?
Здесь нам поможет операция VACUUM!
VACUUM способна эффективно очистить базы от всего лишнего!
Простая операция VACUUM (без параметра FULL)
только высвобождает пространство (как на картинке выше) и делает его доступным для повторного использования. Эта форма команды может работать параллельно с обычными операциями чтения и записи таблицы, так как она не требует исключительной блокировки.
Другими словами если мы используем лишь команду VACUUM (без параметра FULL) пользователи могут продолжать работать в 1С, а если используем параметр VACUUM + FULL, тогда выполняем ее, когда в базе 1С пользователи не работают. (Очень рекомендую делать именно так!).
Если мы говорим с Вами об обслуживании баз 1С Предприятия.
Тогда в приоритете будет использование команды VACUUM + FULL!
Иначе если использовать просто команду VACUUM освобождённое место не возвращается операционной системе (в большинстве случаев так и происходит).
Оно просто остаётся доступным для размещения данных этой же таблицы.
VACUUM + FULL переписывает всё содержимое таблицы в новый файл на диске, не содержащий ничего лишнего, что позволяет возвратить неиспользованное пространство операционной системе. Эта форма работает намного медленнее и запрашивает исключительную блокировку для каждой обрабатываемой таблицы.
А вот еще несколько причин, по которым мы должны использовать VACUUM:
- Для высвобождения или повторного использования дискового пространства, занятого изменёнными или удалёнными строками.
- Для обновления статистики по данным, используемой планировщиком запросов PostgreSQL.
- Для обновления карты видимости, которая ускоряет сканирование только индекса.
- Для предотвращения потери очень старых данных из-за зацикливания идентификаторов транзакций или мультитранзакций.
Можно с уверенность сказать, что основная команда, которая позволяет улучшить производительность 1С в PostgreSQL это VACUUM + FULL!
2. «Планировщик запросов»
На СУБД PostgreSQL как впрочем, и в MS SQL, есть такая вещь (механизм) как «Планировщик запросов» (или «оптимизатор» как его еще называют), именно он занимается выбором плана для наиболее быстрого выполнения SQL запроса.
Какими данными руководствуется «Планировщик запросов» ?
«Планировщик запросов» для этих целей использует информацию о распределении данных в таблицах и уже на основе этой информации строит наиболее оптимальный план выполнения SQL запроса.
Вот этому «Планировщику» мы и должны помогать!
Чтоб он смог строить оптимальные планы запросов, информация в таблицах наших баз данных должна быть актуальной то-есть обновленной!
И здесь нам на помощь приходит команда ANALYZE
ANALYZE также стоит выполнять вместе с VACUUM + ANALYZE! (Если мы говорим о базе 1С).
Выполнив ее, мы тем самим обновим информацию о распределении данных в таблицах.
Чем собственно и поможем «Планировщику запросов» строить свои оптимальные «Планы выполнения SQL запросов».
Иногда меня спрашивают, что же такое этот «План выполнения SQL запроса» ?
План выполнения SQL запроса — это такая последовательность применения операторов реляционной алгебре к исходным и промежуточным отношениям, которое для конкретного текущего состояния БД (её структуры и наполнения) может быть выполнено с минимальным использованием вычислительных ресурсов.
3. «Порча индекса или постоянное увеличение его в размерах»
Довольно часто в базах 1С «портятся» индексы или увеличиваются в размерах.
Операция REINDEX используется для перестройки существующих индексов.
Почему «распухает» индексная таблица ?
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>
- ama– Удалённый пользователь сможет подключаться к базе данных «ama», название базы можно заменить на своё, например «mydb». Помимо этого можно написать слово all, тогда для пользователя будет открыт доступ ко всем базам данных сервера
- ama_user– пользователь с псевдонимом «ama-user» сможет подключаться к базе данных «ama», если указать слово all, то база данных будет доступна любому пользователю
- all- Используется в качестве адреса удалённого рабочего места, в данном случае доступ открывается для любой удалённой машины, для пользователя с псевдонимом указанном в предыдущем столбце. Если требуется указать конкретный адрес, то его можно написать вот в такой форме: 192.168.0.2/32, а для нескольких пользователей придётся указывать несколько строк подключения, указывать каждого в новой строке, пример будет приведён ниже
-md5 – пароль пользователя хешируется алгоритмом MD5, если соответствует, то можно зайти
Пример предоставления доступа нескольким рабочим местам через пользователя «ama-user» к базе данных «ama»:
host ama ama-user 192.168.0.2/32 md5
host ama ama-user 192.168.0.3/32 md5
host ama ama-user 192.168.0.4/32 md5
Для более подробной информации по настройке конфига pg_hba.conf, пройдите по ссылке.
- Сохранить изменения в файле;
- Открыть порт в настройках брандмауэра Windows
- Открыть папку с установленной БД PostgreSQL
По умолчанию база данных устанавливается:
- x86: C:\Program Files (x86)\PostgreSQL\11\data
- x64: C:\Program Files\PostgreSQL\11\data
- В текстовом редакторе открыть файлpostgresql.conf
- Найти строку listen_addresses и убедиться, что она имеет такой вид:
- Открыть Панель управления -> Администрирование -> Службы
- Выбрать в списке службpostgresql и перезапустить ёё
Настройка брандмауэра Windows
Данный пункт необходим, если с СУБД PostgreSQL работает несколько пользователей одновременно. Так же, следует уточнить, что в этом пункте рассматривается базовый сценарий по открытию порта для подключения и может не подойти Вам по параметрами безопасности.
1. Открыть Панель управления -> Брандмауэр защитника Windows ;
2. Выбрать пункт Дополнительные параметры ;
3. Выбрать пункт Правила для входящих подключений -> Создать правило. . На форме мастер создания правила выбрать Для порта и нажать Далее
4. Выбрать пункт Протокол TCP и пункт Определенныйе локальные порты . На стадии установки СУБД PostgreSQL было предложено указать порт для доступа к БД PostgreSQL. Номер порта необходимо ввести в поле Определенные локальные порты: (по умолчанию, при установке указывается порт 5432 ) и затем нажать Далее
5. Выбрать пункт Разрешить подключение и затем нажать Далее
6. Выбрать все пункты и нажать Далее
7. Задать имя правила, например ama-pg и нажать Готово
8. Настройка порта завершена
После выполнения всех пунктов данной инструкции, к БД Postgres можно подключаться с удаленного компьютера
Читайте также: