Как удалить базу postgresql linux

Определение структуры данных

Создание и удаление базы данных

Создание базы данных

Для создания базы данных используется команда CREATE DATABASE , после которой указывается название базы данных.

Для выполнения запросов будем использовать графический клиент pgAdmin, хотя также можно использовать консольный клиент psql.

Чтобы создать новую базу, данных откроем pgAdmin . В левой части программы выберем какую-нибудь базу данных, например, стандартную бд postgres, и нажмем на нее правой кнопкой мыши.

В появившемся меню выберем пункт Query Tool. , и в центральной части программы откроется поле для ввода кода SQL. В это поле введем следующий код:

Для выполнения кода нажмем на значок молнии, и после этого будет создана база данных usersdb.

Чтобы увидеть нашу базу данных, нажмем в левой части на узел Databases правой кнопкой мыши и в контекстном меню выберем Refresh. :

Произойдет обновление, и мы увидем созданную базу данных.

По умолчанию база является неактивной, поэтому ее значок имеет серый цвет. Но чтобы к ней подключиться, достаточно нажать на нее и раскрыть ее узел.

Удаление базы данных

Для удаления базы данных применяется команда DROP DATABASE , после которой указывается название базы данных.

Удаляемая база данных должна быть неактивной, то есть подключение к ней должно быть закрыта.

Источник

Работаем с PostgreSQL через командную строку в Linux

Установка PostgreSQL на Linux (Mint)

Для подключения к базе данных PostgreSQL понадобится установленный PostgreSQL клиент:

Для установки PostgreSQL сервера:

Проверим, можем ли мы подключиться к базе данных PostgreSQL:

Вывод команды должен быть примерно таким:

PostgreSQL Подключение, Пользователи (Роли) и Базы Данных

Логин в только что установленный postgreSQL сервер нужно производить под именем пользователя postgres:

Для подключения к базе данных PostgreSQL можно использовать команду:

Если такая команда не просит ввести пароль пользователя, то можно еще добавить опцию -W.

После ввода пароля и успешного подключения к базе данных PostgreSQL, можно посылать SQL-запросы и psql-команды.

PostgreSQL создание новой роли и базы данных

Создать новую роль c именем admin (указывайте нужное имя):

Создание новой базы данных:

Дать права роли на базу данных:

Включить удаленный PostgreSQL доступ для пользователей

Нам нужно отредактировать файл /etc/postgresql/ /main/pg_hba.conf, задав опцию md5 вместо peer.

может быть 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 .

Читайте также:  Nvflash прошивка видеокарты windows 10

Нужно удалить привелегии у роли, например если нужно удалить роль admin2, нужно выполнить последовательность комманд с Drop Owned:

Дать права пользователю/роли на логин ( role is not permitted to log in ):

Выбор shema psql в консоли:

Посмотреть список всех схем:

Подключиться к конкретной схеме:

Sequences

Получить имена всех созданных sequences:

Получить последнее значение sequence, которые будет присвоено новой вставляемой в таблицу записи:

Источник

Работа с базой данных PostgreSQL

PostgreSQL – опенсорсная реляционная СУБД. Отличается гибкостью и надежностью, поддерживает большое количество полезных возможностей. Часто используется в проектах, где требуется работа со сложными структурами данных, с которыми не справляются простые СУБД.

В этой статье мы разберемся, как работать с PostgreSQL. В качестве примера я буду использовать Ubuntu 18.04.

Установка PostgreSQL

PostgreSQL есть в репозитории Ubuntu, поэтому установка выполняется одной командой. Но сначала нужно проверить обновления самой системы:

Для выполнения команды нужны права суперпользователя. Так что придется вспомнить пароль.

После установки апдейтов инсталлируем PostgreSQL:

PostgreSQL установится вместе с пакетом contrib, в котором содержится дополнительная функциональность, а также утилиты для работы СУБД.

Чтобы убедиться, что все работает, проверим версию:

При установке автоматически создается роль и пользователь postgres.

Настройка PostgreSQL

Работать с PostgreSQL мы будем через терминал с помощью встроенной утилиты psql. Запускаем ее следующей командой:

Можно установить сторонние инструменты для администрирования PostgreSQL, но в этом мало смысла — psql справляется со всеми основными задачами.

Чтобы получить поддержку, вводим в терминале команду:

Если нужна справка по конкретной команде, пишем:

Выйти из psql можно командой \q.

Управление пользователями

В PostgreSQL используется концепция ролей. Одну роль можно рассматривать как отдельного пользователя или как группу пользователей. Роли могут владеть объектами БД и выдавать разрешения другим ролям.

По умолчанию была создана роль postgres. Давайте создадим еще одну роль. Для этого и з консоли системы выполняем команду:

Система запросит имя для новой роли, пароль, а также позволит настроить привилегии — например, нужно ли давать права суперпользователя или разрешать создавать другие роли и базы данных.

Если вы уже зашли в psql, то создать новую роль можно командой:

Затем задаем пароль:

Вывести список всех ролей можно командой /du. Кроме имен отобразятся привилегии каждого роли.

Чтобы закрыть список ролей, выполняем команду q.

Для удаления пользователя выполняем команду:

Это можно также сделать из консоли системы с помощью команды:

Чтоб сменить пароль пользователя, подключаемся к psql с правами суперпользователя. Затем выполняем следующую команду:

Эта операция сохраняется в файле .psql_history вместе с паролем, который не будет зашифрован. В качестве дополнительной меры безопасности эту запись рекомендуется удалить. Файл обычно находится в директории /var/lib/postgresql.

Работа с базами данных в PostgreSQL

Создать базу данных из консоли можно следующей командой:

Если вы используете терминальный клиент psql, то команда будет немного отличаться:

Чтобы посмотреть список всех БД, выполняем команду \l.

Для удаления базы данных используется та же команда, что и для удаления роли — drop. В терминале системы синтаксис будет таким:

В клиенте psql синтаксис похожий:

Подключение к базе данных

По умолчанию psql подключается от имени текущего пользователя Linux к БД с таким же названием. Если эти данные совпадают, достаточно выполнить запуск самого терминального клиента:

Чтобы вывести информацию о текущем соединении, выполняем команду:

Если имя базы данных отличается от имени пользователя, нужно указать его явно:

Если имя роли не совпадает с именем пользователя в Linux, прописываем дополнительные параметры.

Читайте также:  Calculate linux desktop mate

Имя роли и название БД совпадают:

Название базы данных отличается от имени роли:

Чтобы переключиться на другую базу данных внутри psql используем команду:

Создание резервной копии и восстановление из бэкапа

Для создания резервной копии базы данных используется сложная команда:

Чтобы было проще разобраться, рассмотрим каждый параметр:

  • хост – сервер, на котором располагается БД. Например, можно указать localhost, домен, IP-адрес.
  • имя_роли – имя пользователя PostgreSQL, под которым мы работаем с базой данных.
  • формат_дампа – формат, в котором дамп сохранится на сервере. Доступны следующие форматы: c (custom) – архив .tar.gz, t (tar) – архив .tar, p (plain) – текст без сжатия, обычно .sql.
  • путь_к_дампу – путь, по которому будет сохранена резервная копия.
  • имя_БД – название БД, для которой будет создана резервная копия.

Выглядит это примерно так:

Для выполнения этой команды нужно ввести пароль, который используется при входе в psql от имени указанной роли (mybase в приведенном примере).

Восстановление из резервной копии выполняется аналогичным образом:

Параметры похожие, отличия минимальные. Важно знать хост, помнить формат и путь к бэкапу.

Мы разобрались с основными действиями и настройками PostgreSQL. На этом все!

Источник

Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных

Я пытаюсь удалить базу данных, к которой я сейчас подключен, но получаю эту ошибку:

Я действительно не понимаю, как я должен отбросить базу данных, если мне придется закрыть мое соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения моего оператора DROP DATABASE?

Думаю, я мог бы подключиться к другой базе данных, а затем выполнить ее в этом соединении, но я даже не уверен, что это сработает, и кажется действительно странным подключаться к новой базе данных, чтобы просто удалить другую базу данных. Есть идеи? Благодарю.

4 ответа

Потому что вы пытаетесь выполнить команду dropDb в базе данных, к которой у вас открыто соединение.

Согласно документации postgres:

Вы не можете подключиться к базе данных, которую собираетесь удалить. Вместо этого подключитесь к template1 или любой другой базе данных и снова запустите эту команду.

Это имеет смысл, потому что, когда вы удаляете всю базу данных, все открытые соединения, ссылающиеся на эту базу данных, становятся недействительными. Поэтому рекомендуется подключиться к другой базе данных и снова выполнить эту команду.

Если вы столкнулись с ситуацией, когда к базе данных подключен другой клиент, и вы действительно хотите удалить базу данных, вы можете принудительно отключить всех клиентов от этой конкретной базы данных.

Например, чтобы принудительно отключить всех клиентов от базы данных mydb :

Если PostgreSQL & lt; 9.2

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = ‘mydb’;

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ‘mydb’;

Примечание. Эта команда требует прав суперпользователя.

Затем вы можете подключиться к другой базе данных и снова запустить команду dropDb .

Я использую PostgreSQL 12 и pgAdmin-4 в Windows 10. Мне пришлось использовать комбинацию приведенных выше ответов, чтобы удалить базу данных, которую я не мог удалить в pgAdmin, потому что мне не удалось закрыть все открытые соединения в pgAdmin.

В командной строке Windows предполагается, что имя моего сервера — postgres, а моя база данных — mydb:

Я вошел в систему с паролем своего сервера.

Затем я закрыл все открытые подключения к mydb:

Наконец, я успешно сбросил mydb:

Теперь, если я вернусь в pgAdmin-4, его больше нет.

У меня ничего из этого не сработало, поскольку я пытался сделать это через pgAdmin, который держал соединения с базой данных открытыми, как только я их удаляю.

Читайте также:  Windows 10 нет настроек пуска

После того, как вы введете правильную информацию, вы сможете получить командную строку pg, здесь вы можете просто ввести:

После этого вы все еще можете видеть базу данных в pgAdmin, но теперь вы можете просто удалить ее, щелкнув правой кнопкой мыши и выбрав опцию DELETE/DROP .

Если вы столкнулись с этой проблемой в IntelliJ, измените схему с помощью следующего раскрывающегося списка на postgres.

Источник

Как удалить базу данных PostgreSQL, если к ней есть активные подключения?

Мне нужно написать скрипт, который удалит базу данных PostgreSQL. К нему может быть много подключений, но скрипт должен игнорировать это.

стандартный DROP DATABASE db_name запрос не работает, когда есть открытые соединения.

Как я могу решить эту проблему?

10 ответов

это отбросит существующие соединения, за исключением вашего:

запрос pg_stat_activity и получить значения pid, которые вы хотите убить, а затем выдать SELECT pg_terminate_backend(pid int) к ним.

в PostgreSQL 9.2 и выше:

PostgreSQL 9.1 и ниже:

как только вы отключите всех, вам придется отключить и выдать команду DROP DATABASE из соединения с другой базой данных, а не той, которую вы пытаетесь падение.

обратите внимание на переименование до pid . См.этот поток списка рассылки.

в PostgreSQL 9.2 и выше, чтобы отключить все, кроме вашей сессии от базы данных, к которой вы подключены:

в старых версиях это то же самое, просто измените pid to procpid . Чтобы отключиться от другой базы данных, просто измените current_database() к имени базы данных, из которой вы хотите отключить пользователей.

вы хотите REVOKE на CONNECT справа от пользователей базы данных перед отключением пользователей, в противном случае пользователи будут просто держать на повторное подключение, и вы никогда не получите шанс сбросить DB. См.комментарий и вопрос, с которым это связано,как отсоединить всех пользователей от базы данных.

если вы просто хотите отключать бездействующих пользователей, см. этот вопрос.

ты можешь убить все соединения перед удалением базы данных с помощью

Я заметил, что postgres 9.2 теперь вызывает столбец pid, а не procpid.

Я склонен называть его из командной строки:

надеюсь, что это полезно. Спасибо @JustBob за sql.

в зависимости от версии PostgreSQL, вы можете столкнуться с ошибкой, что делает pg_stat_activity чтобы опустить активные соединения от удаленных пользователей. Эти соединения также не показаны внутри pgAdminIII.

если вы выполняете автоматическое тестирование (в котором вы также создаете пользователей), это может быть вероятным сценарием.

в этом случае вам нужно вернуться на запросы, как:

примечание: в 9.2+ у вас будет изменение procpid to pid .

в командной строке Linux я бы сначала остановил все процессы postgresql, которые выполняются, связав эту команду sudo / etc / init.перезапуск D / postgresql

введите команду bg чтобы проверить, работают ли другие процессы postgresql

затем следует dropdb dbname удалить базу данных

это работает для меня в командной строке linux

Я просто перезапускаю службу в Ubuntu, чтобы отключить подключенные клиенты.

в PostgreSQL 9.2 и выше:

SELECT pg_terminate_backend(pid)FROM pg_stat_activity WHERE datname = ‘YOUR_DATABASE_NAME_HERE’

Я поставил этот ответ, потому что включаю команду (выше), чтобы заблокировать новые соединения и потому что любая попытка с помощью команды.

. не работает, чтобы блокировать новые подключения!

благодаря @araqnid @GoatWalker ! =D

в моем случае мне пришлось выполнить команду, чтобы удалить все соединения, включая мое активное соединение администратора

который прекратил все соединения и показал мне фатальное сообщение об ошибке:

FATAL: terminating connection due to administrator command SQL state: 57P01

Источник

Оцените статью