Как сделать скрипт базы данных postgresql

Обновлено: 08.07.2024

Работа с базой данных и запросами пугает некоторых (а может даже и многих) из нас. Наверное, я потерял сотню читателей, просто написав “PostgreSQL” в заголовке. Но, раз уж вы здесь, хочу сообщить, что это очень полезная информация, которую нужно знать. Постараюсь объяснить всё так, чтобы вам было легче разобраться в этом. Ну, а прежде чем мы двинемся дальше, я хочу, чтобы вы прочли эту цитату. Дважды.

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

Робин Шарма в “Монах, который продал свой “Феррари”

Мне самому тоже это н е нравится, но, как сказал Робин Шарма, занятие тем, что нам не нравится, и отличает нас от стада. В этой части мы создадим сайт (созданный при помощи flask), который будет собирать данные, введенные пользователем, и сохраним их в нашу базу данных (PostgreSQL). Также мы запустим его в Интернет, чтобы он работал в реальном времени.

Важное замечание — Я уже написал подробную статью (Часть 4 в этом цикле), где мы создали приложение при помощи Flask и запустили его в Интернет с приложением Heroku. Поэтому, в этой статье я больше внимания уделю back-end. Если вы ещё не читали ту статью, желательно быстро просмотреть её, чтобы быть в курсе, как настраивать front-end, виртуальную среду и запускать приложение в Интернет. Давайте, я подожду вас тут.

Так, теперь все понимают, что к чему? Давайте начинать.

Шаг 1- Настройка Front-End

Как я сказал ранее, основной акцент я сделаю на back-end. Но это не значит, что мы забудем про всё остальное. Я быстро расскажу обо всем, чтобы освежить знания новичков, которые учатся на этих статьях.

Flask — это микрофреймворк для веб-разработки, который часто используется при работе с базами данных. Мы создадим страницу, с которой сможем получать данные от пользователей. Создать сайт с Flask очень легко. Посмотрите на код ниже.

Я знаю, что вы уже читали это в Части 4, поэтому понимаете, как все работает. Новое здесь только methods = ['POST'] , потому что мы отправляем данные на сервер. Также не забудьте настроить виртуальную среду для приложения (Шаг 4 в Части 4).

Я загрузил и изменил шаблон, чтобы получать данные о росте, весе, поле и размере обуви пользователя. Вы, должно быть, думаете зачем? Ладно рост и вес, но размер обуви… Верно? Всё объясню в конце. Мой front-end выглядит вот так. Какой дизайн сделать для своего, выбирать вам.


Шаг 2 — Настройка back-end

2.1 Создаем базу данных PostgreSQL

Для создания и хранения данных нам понадобится система управления базами данных. Для этого мы и используем PostgreSQL. Если вы работаете на Windows или Mac, на официальном сайте есть установочные файлы. Если же вы пользуетесь Linux, найдите pgAdmin III в Ubuntu Software (для версий 16.04 и позже). А если вы пользуетесь Ubuntu 15.10 и раньше (в чем я сильно сомневаюсь), переходите на первый ответ на этой странице Stack Exchange, чтобы установить её вручную (мы уже создали виртуальную среду, поэтому делайте только то, что вам нужно).

Создаем пользователя

После установки pgAdmin 3 создайте пользователя и пароль, введя следующее. Вместо первого ‘postgres’ должно быть имя пользователя, а вместо второго — имя базы данных.


Соединение с локальным сервером

Откройте pgAdmin3, выберите “File” в левом верхнем углу, а затем add server. Вы увидите такой же экран. Введите имя пользователя и пароль.



Как вы видите, здесь находится база данных postgres, которая появилась при создании пользователя. Кликаем правой кнопкой мыши на ”databases”, чтобы создать новую базу данных. Свою я назвал Data Collector. Это лучшее название, которое я смог придумать. Извините. Теперь, имея базу данных, нам нужно создать колонки (таблицу), в которых будут храниться наши данные.

2.2 Соединение базы данных с сайтом и создание таблицы

SQLAlchemy поможет нам соединить сайт с базой данных, а psycopg — это обертка PostgreSQL для Python. Нам не нужно углубляться, давайте просто установим две эти библиотеки и продолжим работу над кодом.

В нашем приложении нужно настроить имя пользователя, пароль и имя базы данных. После postgresql:// первое — имя пользователя, затем двоеточие, а затем пароль. И вот наша база данных готова. С этим разобрались, теперь нужно создать экземпляр SQLAlchemy.

Переходим к нашему классу. Здесь нам на помощь приходит объектно-ориентированное программирование. При помощи нашего экземпляра создаем модель. В ней мы определяем название таблицы и всех столбцов, в которые пользователь будет вводить данные. Нам не стоит запускать весь код, потому что он не закончен. Следовательно, нам нужно запустить эту модель вручную. Переходим в папку с нашим приложением, запускаем в консоли python (просто введите python) и введите следующее.


Как видите, у нас теперь есть таблица и столбцы, готовые для хранения данных. Осталось лишь написать 3 строчки кода.

2.3 Сохраняем данные в базе

Проверив, что метод — POST, скрипт будет сохранять введенные пользователем данные в переменные. Теперь нужно создать сессию, добавить данные в базу и сохранить. И всё готово.


Попробуй su - postgres, и потом проверь сможешь ли ты зайти в psql.

Если сделать так, то

serg002 ★ ( 25.10.20 19:44:39 )
Последнее исправление: serg002 25.10.20 19:50:09 (всего исправлений: 3)


root имеет право создавать базу?

$ createdb -h location-osm-data-db -p 5432 -U postgres osm

А вот так базу создало

serg002 ★ ( 25.10.20 19:56:46 )
Последнее исправление: serg002 25.10.20 19:57:33 (всего исправлений: 1)

Бабушка рекомендует открыть документацию по начальной настройке PostgreSQL, прочесть, настроить, внести првильные данные в скрипт.
Если не получается - в JOB.

О! Нашел причину! По дефолту оно конектится к базе root, которой нет. Если указать базу, то всё ок

Для выполнения SQL скрипта для Postgre SQL выполните следующие действия.

Запускаем pgAdmin ( Пуск\Программы\PostgreSQL 8.3\pgAdmin III ).

Запуск pgAdmin

Выберите сервер БД, на котором находится база Iris CRM. Если установка производилась из дистрибутива, то сервер будет расположен по адресу localhost .

Выбор сервера в pgAdmin

На сервер нужно нажать двойным щелчком и к нему будет произведено подключение. При первом подключении нужно будет ввести пароль для пользователя postgres . Пароль по умолчанию: postgres . Если пароль не подходит, то его можно посмотреть в файле iriscrm/admin/settings/settings.xml .

Ввод пароля в pgAdmin

После этого в списке баз данных необходимо найти базу iriscrm и открыть ее двойным щелчком мыши. После этого, нужно нажать кнопку Выплнить пользовательские SQL запросы на панели инструментов.

Выполнение SQL

В результате откроется окно для выполнения SQL запросов. В начале необходимо убедиться, что запросы будут выполняться на базе iriscrm (название базы и сервера отображается в поле, обведенным красным овалом). Для выполнения SQL скрипта, нужно открыть файл скрипта из меню Файл либо вставить текст запроса из буфера. Содержимое скрипта отобразится в окне. Чтобы выполнить скрипт, нужно нажать на кнопку Выполнить запрос (она указана стрелкой). Результат выполнения запроса будет показан в нижней панели.

Данная статья является введением в pgAdmin III – консоль комплексного проектирования баз данных и управления базами данных для баз данных Postgres. А также данная статья познакомит нас с основными возможностями в pgAdmin и подготовит нас к созданию баз данных, вводу данных, а также созданию мультитабличных запросов с помощью графического инструмента запросов (Graphical Query tool), все это не написав ни одной строки SQL.

1. Начало работы с pgAdmin III

После установки pgAdmin 3, к серверу нужно подключиться. В нашем случае мы будем использовать “localhost” в качестве сервера.



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


2. Создание нашей первой базы данных


Введем “firstDB” в качестве имени базы данных, оставим поле Owner по умолчанию пустым. Потом кликаем по кнопке OK.



3. Добавляем таблицы в БД через графический консоль управления базами данных


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



Добавляем поля в таблицу: кликаем по вкладке “Columns”, потом по кнопке Add и введем следующие значения:



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


Появится диалоговое окно добавления нового первичного ключа. Введем “pk_city_name” в качестве имени ключа.


Потом переходим к вкладке “Columns”, и привязываем ключ к имени поля city таблицы, которую мы создали, выбрав “name”.


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


Теперь мы определили имя таблицы, имена столбцов, их типы и простое ограничение (первичный ключ) для предотвращения дублирования записей с одним и тем же городом во время добавления записи в таблицу. Результат нашей работы можешь можешь посмотреть, перейдя в обозреватель объектов и развернув таблицу cities.


4. Добавляем таблицы в БД через SQL Query Tool


Кроме того, чтобы добавить таблицу через графический интерфейс (GUI), также можно создавать таблицы для БД с помощью скриптов. Для того, чтобы запрашивать и эксплуатировать данные в PostgreSQL, инструмент SQL Query нужен и поставляется в pgAdmin 3. Давайте посмотрим на SQL query tool в действии – создание таблицы.

Щелчок на значке SQL создаст еще одно окно, в котором SQL-запрос должен записываться.



Следующая SQL-команда создаст таблицу погоды:
Пробелы (например, пробелы, символы табуляции и новой строки) могут свободно использоваться в SQL-командах. Это означает, что мы можем писать команды по-разному, поступенчато, или в одну строчку. Две тиры (“­ – – ”) представляют собой комментарии. Все, что следует после них, игнорируется до конца строки. SQL не чувствителен к регистрам ключевых слов и идентификаторов, за исключением того, когда идентификаторы взяты в двойных кавычках.

“varchar(80)” указывает тип данных, который может хранить произвольные строки символов длиной до 80 символов. “int” – это обычный целочисленный тип. “real” – тип для хранения чисел с плавающей точкой одинарной точности. “date” – само имя говорит за себя.

PostgreSQL поддерживает стандартные типы SQL: int, small int, real, double precision, char(N), varchar(N), date, time, timestamp и interval, а также другие вспомогательные типы и богатый набор геометрических типов. В PostgreSQL можно настраивать с произвольным числом определяемых пользователем типов данных. Следовательно, имена типов не являются синтаксическими ключевыми словами, за исключением случаев, когда это требуется для поддержки особых случаев в стандарте SQL.


Если отсутствует соединение с б.д. firstDB, то можно прокрутить выпадающий список с базами данных, и в списке выбираем “ ”. В появившемся диалоговом окне соединения к базам данных теперь можно выбрать подходящую базу данных.


Потом вернемся в обозреватель объектов и правой кнопкой мыши кликаем на узел “Tables”, в меню выбираем Refresh. Теперь можем видеть, что у нас появилась еще одна таблица Weather с 5 столбцами и с созданным первичным ключом.


5. Добавляем данные в таблицу

Вручную добавляем записи данных в табличной форме. Например, мы можем ввести записи данных в таблицу cities, щелкнув правой кнопкой мыши по cities > View Data > View Top 100 Rows


Введем “Madison, (89.40, 43.07)” в качестве имени и локации в одну строку, и добавляем “San Francisco, (-122.43, 37.78)” в другую строку, как показано ниже (возможно, потребуется нажать на кнопку Refresh после ввода каждой строки).


Тем не менее, это не является эффективным способом ввода данных. Это полезно для добавления простых тестовых данных. С другой стороны, мы можем использовать инструмент SQL Query еще раз, чтобы ввести данные в режиме batch. Ниже приводится команда SQL для вставки трех записей в таблицу weather.

Давай сотрем команды SQL в редакторе SQL, щелкнув на кнопку “clear edit window” на панели инструментов, и перепишем вышеприведенный код SQL в окно редактора SQL, и после этой работы кликнем по кнопке “Execute pgScript” для запуска команды.


Если открыть таблицу weather в обозревателе объектов, то увидим, что три записи уже добавлены.


6. Запрашиваем данные через графический Query Builder

Теперь у нас есть данные в двух таблицах, теперь мы можем использовать инструмент запросов для просмотра всех наших данных. В этой части статьи мы научимся использовать Graphical Query Builder вместо SQL- редактора для создания SQL команд, чтобы представить данные. Graphical Query Builder (GQB) является частью Query Tool, который позволяет визуально создавать простые SQL- запросы.

Кликаем по “SQL query tool”, чтобы открыть окно запросов, и стираем SQL- команды в SQL- редакторе. Потом кликаем по “Graphical Query Builder”.


Теперь мы можем сделать связь ( join ) между двумя таблицами, чтобы мы могли получить данные из обеих таблиц путем связывания поля name в таблице cities с полем city в таблице weather. Для создания связи ( join ) между отношениями, перетащим столбец (столбец “name” таблицы cities ) из одного отношения в другую (столбец “city” таблицы weather ).


20 Фев 2018 21:02:09 | 1 comment

Начало работы с PostgreSQL 10

В данной статье я расскажу о базовых операциях PostgreSQL 10: основные команды в оболочке psql, создание и удаление базы данных, работа с табличными пространствами, создание и удаление ролей, создание простых таблиц, работа со схемами и т.д.

Исходные данные: Debian 9.3 (Stretch), PostgreSQL 10.2
Задача: Научиться базовым навыкам работы с PostgreSQL

Давайте зайдем под пользователем postgres, запустим оболочку psql и попробуем поработать:

Перед нами открылась оболочка с приглашением ввести команды:

Первым делом давайте посмотрим информацию о версии PostgreSQL:

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

1. Список баз данных.

Список БД можно посмотреть 3-мя способами:
Ключ -l командной строки приложения psql, метакоманда \l или select запрос к системному каталогу pg_database, например

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

Базу данных можно создать 2-мя способами: Через утилиту createdb или с помощью команды CREATE DATABASE имя;
Утилита createdb не делает ничего волшебного, она просто подключается к базе данных postgres и выполняет SQL-команду CREATE DATABASE.

Пример этих команд и вывод списка БД:

Так же следует упомянуть про шаблоны баз данных, при инициализации основной БД создаются так же 2 базы-шаблоны — это template0 и template1.
По факту команда CREATE DATABASE выполняет копирование существующей базы данных. По умолчанию копируется стандартная системная база template1. Таким образом, template1 это шаблон, на основе которого создаются новые базы. Если добавить объекты в template1, то впоследствии они будут копироваться в новые базы данных.
В системную базу template0 не желательно вносить какие либо изменения.
В таблице pg_database есть два полезных флага для каждой базы данных: datistemplate и datallowconn.
datistemplate — Если true, базу данных сможет клонировать любой пользователь с правами CREATEDB, то есть использовать в качестве шаблона, в противном случае, клонировать эту базу смогут только суперпользователи и её владелец.
datallowconn — Если false, никто не сможет подключаться к этой базе данных. Это позволяет защитить базу данных template0 от модификаций.
Для создания базы данных на основе template0 нужно выполнить из среды SQL:

или из командной оболочки под пользователем postgres:

Просмотр флагов datistemplate и datallowconn:

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

Тут так же как и при создании, есть 2 подхода: Через утилиту dropdb или с помощью команды DROP DATABASE имя;

Пример:
Пример этих команд и вывод списка БД:

4. Работа с табличными пространствами.

Табличные пространства в PostgreSQL позволяют администраторам организовать логику размещения файлов объектов базы данных в файловой системе. К однажды созданному табличному пространству можно обращаться по имени на этапе создания объектов.
Табличные пространства позволяют администратору управлять дисковым пространством для инсталляции PostgreSQL. Это полезно минимум по двум причинам. Во-первых, это нехватка места в разделе, на котором был инициализирован экземпляр Pg или кластера Pg и невозможность его расширения. Табличное пространство можно создать в другом разделе и использовать его до тех пор, пока не появится возможность переконфигурирования системы. Во-вторых, табличные пространства позволяют администраторам оптимизировать производительность согласно бизнес-процессам, связанным с объектами базы данных. Например, часто используемый индекс можно разместить на очень быстром и надёжном, но дорогом SSD-диске. В то же время таблица с архивными данными, которые редко используются и скорость к доступа к ним не важна, может быть размещена в более дешёвом и медленном хранилище.

Для создания табличного пространства используется команда CREATE TABLESPACE.
Каталог нового табличного пространства должен существовать, быть пустым и принадлежать пользователю ОС, под которым запущен PostgreSQL.

Создаем каталог и выставляем права:

Подключаемся к Pg и создаем новое табличное пространство:

Посмотреть список табличных пространств можно 2-мя способами: метакоманда \db или \db+ или select запрос к системному каталогу pg_tablespace;

Создавать табличное пространство должен суперпользователь базы данных, но после этого можно разрешить обычным пользователям его использовать. Для этого необходимо предоставить привилегию CREATE на табличное пространство.
Таблицы, индексы и целые базы данных могут храниться в отдельных табличных пространствах. Для этого пользователь с правом CREATE на табличное пространство должен указать его имя в качестве параметра соответствующей команды.

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

В колонке Tablespace мы видим что база test2 находится в новом табличном пространстве fast.

Табличное пространство, связанное с базой данных, также используется для хранения её системных каталогов. Более того, это табличное пространство используется по умолчанию для таблиц, индексов и временных файлов, создаваемых в базе данных, если не указано иное в выражении
TABLESPACE, или переменной default_tablespace, или temp_tablespaces (соответственно). Если база данных создана без указания конкретного табличного пространства, то используется пространство, к которому принадлежит копируемый шаблон.

При инициализации экземпляра Pg или кластера Pg автоматически создаются два табличных пространства. Табличное пространство pg_global используется для общих системных каталогов. Табличное пространство pg_default используется по умолчанию для баз данных template1 и template0 (в свою очередь, также является пространством по умолчанию для других баз данных, пока не будет явно указано иное в выражении TABLESPACE команды CREATE DATABASE).

5. Работа с ролями.

В PostgreSQL используется концепция ролей (roles) для управления разрешениями на доступ к базе данных. Роль можно рассматривать как пользователя базы данных или как группу пользователей, в зависимости от того, как роль настроена. Роли могут владеть объектами базы данных (например, таблицами и функциями) и выдавать другим ролям разрешения на доступ к этим объектам, управляя тем, кто имеет доступ и к каким объектам. Кроме того, можно предоставить одной роли членство в другой роли, таким образом одна роль может использовать привилегии других ролей.

Концепция ролей включает в себя концепцию пользователей (user) и групп (groups). До версии 8.1 в PostgreSQL пользователи и группы были отдельными сущностями, но теперь есть только роли. Любая роль может использоваться в качестве пользователя, группы, и того и другого.

Роли базы данных концептуально полностью отличаются от пользователей операционной системы.На практике поддержание соответствия между ними может быть удобным, но не является обязательным. Роли базы данных являются глобальными для всего инстана Pg или кластера Pg базы данных (не для отдельной базы данных). Для создания роли используется SQL-команда CREATE ROLE, а для удаления DROP ROLE.

5.1 Создание ролей.

Роль можно создать/удалить 2-мя путями: через консольную утилиту createuser или dropuser и через psql с помощью CREATE ROLE или DROP ROLE.

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

Для просмотра списка ролей можно использовать метакоманду \du или сделать select запрос к системному каталогу pg_roles.

Для каждой роли можно назначит определенный атрибуты, определяющие её полномочия и взаимодействие с системой аутентификации клиентов.

Доступны следующие атрибуты (в скобках указаны столбцы из каталогу pg_roles):

1) Право подключения (rolcanlogin):
Только роли с атрибутом LOGIN могут использоваться для начального подключения к базе данных. Роль с атрибутом LOGIN можно рассматривать как пользователя базы данных. Для создания роли такой роли можно использовать любой из вариантов:
CREATE ROLE имя LOGIN;
или
CREATE USER имя;
или использование консольной утилиты createuser.
Как мы уже сказали выше, команда CREATE USER эквивалентна CREATE ROLE за исключением того, что CREATE USER по умолчанию предполагает атрибут LOGIN, в то время как CREATE ROLE нет.)

2) Статус суперпользователя (rolsuper):
Суперпользователь базы данных обходит все проверки прав доступа, за исключением права на вход в систему. Это опасная привилегия и она не должна использоваться небрежно. Лучше всего выполнять большую часть работы не как суперпользователь. Для создания нового супер пользователя используется CREATE ROLE имя SUPERUSER. Это нужно выполнить из под роли, которая также является суперпользователем.

3) Создание базы данных (rolcreatedb):
Роль должна явно иметь разрешение на создание базы данных (за исключением суперпользователей, которые пропускают все проверки). Для создания такой роли используется CREATE ROLE имя CREATEDB.

4) Создание роли (rolcreaterole):
Роль должна явно иметь разрешение на создание других ролей (за исключением суперпользователей, которые пропускают все проверки). Для создания такой роли используется CREATE ROLE имя CREATEROLE. Роль с привилегией CREATEROLE может также изменять и удалять другие
роли, а также выдавать и отзывать членство в ролях. Однако, для создания, изменения, удаления суперпользовательских ролей, а также изменения в них членства, требуется иметь статус суперпользователя, привилегии CREATEROLE в таких случаях недостаточно.

5) Запуск репликации (rolreplication):
Роль должна иметь явное разрешение на запуск потоковой репликации (за исключением суперпользователей, которые пропускают все проверки). Роль, используемая для потоковой репликации, также должна иметь атрибут LOGIN. Для создания такой роли используется CREATE ROLE имя REPLICATION LOGIN.

6) Пароль (rolpassword):
Пароль имеет значение, если метод аутентификации клиентов требует, чтобы пользователи предоставляли пароль при подключении к базе данных. Методы аутентификации password и md5 используют пароли. База данных и операционная система используют раздельные пароли. Пароль указывается при создании роли: CREATE ROLE имя PASSWORD ‘строка’.

7) Игнорировать систему защиты строк (rolbypassrls):
В дополнение к стандартной системе прав SQL, управляемой командой GRANT, на уровне таблиц можно определить политики защиты строк, ограничивающие для пользователей наборы строк, которые могут быть возвращены обычными запросами или добавлены, изменены и удалены командами, изменяющими данные. Это называется также защитой на уровне строк (RLS, Row-Level Security). Суперпользователи и роли с атрибутом BYPASSRLS всегда обращаются к таблице, минуя систему защиты строк. Более детально о RLS читайте в официальной документации или в переводе на русский.

Атрибуты ролей могут быть изменены после создания командой ALTER ROLE. Для получения более детальной информации Вам следует обратиться к справке по командам CREATE ROLE и ALTER ROLE.

Давайте добавим право LOGIN и CREATEDB для нашей роли utest2:

А теперь отберем у роли utest2 право CREATEDB и добавим CREATEROLE и REPLICATION:

Отдельно нужно упомянуть про такую вещь как членство в роли.
Часто бывает удобным сгруппировать пользователей для упрощения администрирования привилегий: привилегии выдаются или отзываются на всю группу. В PostgreSQL для этого создаётся роль, которая представляет группу, а затем членство (membership) в этой группе выдаётся ролям
индивидуальных пользователей.

Сделаем групповую роль, добавим членов и создадим новую БД в табличном пространстве fast и укажем эту групповую роль владельцем БД:

Теперь мы можем попробовать подключиться к базе group_db под пользователем utest2 из консоли:

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

Так же хочу обратить внимание на такую вещь как владелец табличного пространства, чуть выше когда мы создавали табличное пространство fast, мы его создали под пользователем postgres и его владельцем стал он, см. столбец Owner при выводе информации метакомандой \db
Поменять владельца табличного пространства можно командой ALTER TABLESPACE OWNER TO ;
Например:

5.2 Удаление ролей.

Так как роли могут владеть объектами баз данных и иметь права доступа к объектам других, удаление роли не сводится к немедленному действию DROP ROLE. Сначала должны быть удалены и переданы другим владельцами все объекты, принадлежащие роли, также должны быть отозваны все права, данные роли.

То есть наша роль является владельцем базы group_db. Чтобы решить эти проблемы нужно поменять владельца БД и только после этого удалить роль:

Как мы видим и вывода \l+ у нашей БД group_db поменялся владелец и роль group_role1 была удалена (вывод \du).

6. Работа с таблицами.

Посмотрим список таблиц в БД с помощью метакоманды \dt

Теперь удалим табличку my_first_table с помощью DROP TABLE
Попытка удаления несуществующей таблицы считается ошибкой, поэтому рекомендуется использовать конструкцию DROP TABLE IF EXISTS

После удаления вывод \dt скажет нам, что в БД нет таблиц.

7. Работа со схемами.

Схема — это способ объединения таблиц, функций, операторов, типов данных и других объектов в БД.
Одно и то же имя объекта можно свободно использовать в разных схемах, например и schema1, и myschema могут содержать таблицы с именем mytable. В отличие от баз данных, схемы не ограничивают доступ к данным: пользователи могут обращаться к объектам в любой схеме текущей базы данных, если им назначены соответствующие права.

Для создания схемы используется команда CREATE SCHEMA ;

Чтобы создать объекты в схеме или обратиться к ним, указывайте полное имя, состоящее из имён схемы и объекта, разделённых точкой:

Этот синтаксис работает везде, где ожидается имя таблицы, включая команды модификации таблицы и команды обработки данных, обсуждаемые в следующих главах. (Для краткости мы будем говорить только о таблицах, но всё это распространяется и на другие типы именованных объектов, например, типы и функции.)

Есть ещё более общий синтаксис

При создании схемы так же как и при создании таблиц её владельцем становится текущий пользователь, об этом не стоит забывать!

Создадим схему и таблицу в ней:

Посмотрим список схем (метакоманда \dn):

Чтобы найти нашу таблицу мы должны будем обращаться к ней по полному пути, но вывод списка таблиц через метакоманду \dt не выведет нашу новую таблицу из схемы sc_test, чтобы он вывел таблицу мы должны добавить путь поиска схемы, это делается командой:

Чтобы не вводить SET search_path TO каждый раз мы можем задать search_path для конкретного пользователя на постоянной основе командой:

После этого мы сможем вывести список наших таблиц из схемы public и новой sc_test:

А что же за схема public? А дело вот в чем, до этого мы создавали таблицы, не указывая никакие имена схем, думаю Вы помните. По умолчанию такие таблицы (и другие объекты) автоматически помещаются в схему ‘public’. Она содержится во всех создаваемых базах данных. Таким образом, до того как мы указали путь поиска нашей новой схемы, команда:

Указав путь поиска схемы мы можем выполнить DROP TABLE my_first_table; без указания схемы, но тут есть нюанс:
ВНИМАНИЕ! Т.к. мы можем создавать одинаковые по именам объекты в разных схемах, то порядок поиска схем в путь будет иметь значение при разных операциях (создание, модификацию, удаления и др.) над объектами, вывести список путей поиска схем можно командой:

Таким образом DROP TABLE my_first_table; первым делом удалит таблицу из схемы sc_test если она там есть, а повторный вызов DROP TABLE my_first_table; уже удалит таблицу из схемы public, при её наличии там.
Вот поэтому если Вы используете схемы, то и все операции над объектами должны выполнятся с указанием полного имени объекта.

Для удаления схемы нужно воспользоваться командой DROP SCHEMA ;
Попытка удаления несуществующей схемы считается ошибкой, поэтому рекомендуется использовать конструкцию DROP SCHEMA IF EXISTS ;

Если в схеме есть объекты, то при попытке её удаление будет выведена ошибка, пример:

В таком случае нужно воспользоваться доп. опцией CASCADE, например:

Как мы видим, схема sc_test и таблица my_first_table были удалены.

На этом все, до скорых встреч.

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

Читайте также: