Skip to content

Создание базы данных и таблиц в PostgreSQL: Изучение PostgreSQL с Grant Fritchey

Пересказ статьи Grant Fritchey. Creating a Database and Tables in PostgreSQL: Learning PostgreSQL with Grant


У вас есть локально работающий экземпляр PostgreSQL. Что дальше? Создание резервных копий. Но прежде мне нужно создать базу данных и пару таблиц, чтобы было что архивировать.

Как и в любой системе управления данными, имеется много способов это сделать. Вы можете делать все в командной строке или же использовать графический интерфейс пользователя (GUI), который позволяет вам работать с PostgreSQL. Команды SQL доступны сразу, как только вы подключились к PostgreSQL. Здесь я, в первую очередь, буду работать с Azure Data Studio (ADS). Это обусловлено тем, что:

  1. Мне нравится Azure Data Studio. С ней легко работать. Она быстрая. Она чистая. Она имеет плагины для выполнения различных вещей.

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

  3. Мне просто более комфортно работать над кодом с выделенным инструментом, а не просто выполняя его из командной строки.

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


Итак, начнем.

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


Команда создания базы данных очень простая:

CREATE DATABASE postgrelearning;

Да, это очень легко.

Давайте еще немного поговорим об этом. Поскольку я знаю SQL Server, я собираюсь сравнивать, как делать что-то там и здесь. В SQL Server у вас есть системная база данных model, используемая как шаблон при создании новой базы данных. В PostgreSQL происходит то же самое, но база данных называется template1. template1 работает очень похоже на model. Вы можете добавлять объекты в template1, и они будут автоматически присутствовать в новой базе данных, которую вы создаете.

Однако в PostgreSQL происходит больше. Давайте взглянем на мой список баз данных:



Есть еще база данных template0. Что это? Ну, в случае если вы совершенно запутаетесь с template1, template0 будет служить базовым уровнем. Кроме того, когда вы восстанавливаете базу данных, PostgreSQL использует template0 для запуска этого процесса.

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

Команда CREATE DATABASE имеет много опций, которые вы можете найти в документации. Одна из наиболее интересных для меня связана с указанием шаблонной базы данных. Вы можете выполнить, например, такую команду CREATE DATABASE:

CREATE DATABASE templatetest WITH template = postgrelearning;

И да. Вы можете указать другую базу данных в качестве шаблона. Однако:



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

Имеется несколько других опций от определения владельца базы данных, локали, коллации и т.д.. Я не буду здесь их рассматривать.

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

DROP DATABASE templatetest;

Эта команда удалит всю базу данных. Однако вы не можете иметь подключение к базе данных, когда ее удаляете. Как и в случае CREATE, DROP имеет некоторые опции. Например, вы можете написать такую команду:

DROP DATABASE IF EXISTS templatetest;

Это устранит ошибку, если вы пытаетесь удалить несуществующую базу данных. Вы также можете удалить используемую базу данных:

DROP DATABASE IF EXISTS templatetest WITH (FORCE);

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

Еще одно. Используя ADS, мы можете быстро легко переключаться между базами данных в окне запроса. Однако, кажется, нет способа сделать это исключительно на SQL. Вы управляете соединением с помощью используемого инструмента.

Создание таблицы


Когда у нас есть база данных, чтобы было с чем работать, начнем с использования синтаксиса CREATE TABLE для получения таблицы. Если вы уже знакомы с реляционными СУБД, то это весьма большая статья (посмотрите по ссылке на документацию). Я собираюсь пока придерживаться простого варианта, и не залезать глубоко в кроличью нору. В дальнейшем можно будет в это углубиться.

Вот первый пример:

CREATE TABLE TableTest1 
(ID int NOT NULL,
SomeValue varchar(50) NOT NULL,
AnotherValue varchar(30) NULL);

Базовый синтаксис узнаваем, если вы пришли с SQL Server. В ADS результаты выглядят так:



Код не включает схему, поэтому используется схема по умолчанию - public. Я предпочитаю определять схему, привязывать к ней таблицы, а не использовать схему по умолчанию. Собрание всего в определенной схеме или схемах значительно упрощает процесс блокировки.

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

CREATE SCHEMA hsr;

Теперь создадим пару таблиц с первичными и внешними ключами:

CREATE TABLE hsr.radiobrand 
(radiobrandid int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
radiobranddesc varchar(50) NOT NULL);
CREATE TABLE hsr.radio
(radioid int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
radioname varchar(50) NOT NULL,
radiobrandid int REFERENCES hsr.RadioBrand NOT NULL);

Как и в SQL Server, синтаксис для поддержки создания ключей использует ALTER, а также CREATE. Имеется также синтаксис для создания табличных ограничений, который, если вы создаете составной ключ или используя его как составной ключ, должны использовать вместо приведенного. Вы могли бы так создать таблицу hsr.radio этим способом:

CREATE TABLE hsr.radio
(radioid int NOT NULL GENERATED BY DEFAULT AS IDENTITY,
radioname varchar(50) NOT NULL,
radiobrandid int NOT NULL,
CONSTRAINT radiopk PRIMARY KEY (radioid),
FOREIGN KEY (radiobrandid) REFERENCES hsr.RadioBrand(radiobrandid));

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

Это основы.

Вы можете провести небольшой тест:

insert into hsr.radiobrand
(radiobranddesc)
VALUES
('Icom');
SELECT radiobrandid,
radiobranddesc
FROM hsr.radiobrand;

Вот результаты:


Заключение


Теперь у нас есть база данных и пара таблиц с данными. Пока PostgreSQL мало чем отличается от SQL Server. Не идентичны, конечно, но очень похожи. Мы увидим более значительные различия по мере продвижения вглубь. Возможность определить более одной шаблонной базы данных — изящный трюк. Остальное было ожидаемо.

В следующий раз мы действительно собираемся заняться резервным копированием и восстановлением.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

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