The first test to see whether you can access the database server is to try to create a database. A running PostgreSQL server can manage many databases. Typically, a separate database is used for each project or for each user.
Possibly, your site administrator has already created a database for your use. In that case you can omit this step and skip ahead to the next section.
To create a new database, in this example named mydb
, you use the following command:
$
createdb mydb
If this produces no response then this step was successful and you can skip over the remainder of this section.
If you see a message similar to:
createdb: command not found
then PostgreSQL was not installed properly. Either it was not installed at all or your shell’s search path was not set to include it. Try calling the command with an absolute path instead:
$
/usr/local/pgsql/bin/createdb mydb
The path at your site might be different. Contact your site administrator or check the installation instructions to correct the situation.
Another response could be this:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket?
This means that the server was not started, or it is not listening where createdb
expects to contact it. Again, check the installation instructions or consult the administrator.
Another response could be this:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "joe" does not exist
where your own login name is mentioned. This will happen if the administrator has not created a PostgreSQL user account for you. (PostgreSQL user accounts are distinct from operating system user accounts.) If you are the administrator, see Chapter 21 for help creating accounts. You will need to become the operating system user under which PostgreSQL was installed (usually postgres
) to create the first user account. It could also be that you were assigned a PostgreSQL user name that is different from your operating system user name; in that case you need to use the -U
switch or set the PGUSER
environment variable to specify your PostgreSQL user name.
If you have a user account but it does not have the privileges required to create a database, you will see the following:
createdb: error: database creation failed: ERROR: permission denied to create database
Not every user has authorization to create new databases. If PostgreSQL refuses to create databases for you then the site administrator needs to grant you permission to create databases. Consult your site administrator if this occurs. If you installed PostgreSQL yourself then you should log in for the purposes of this tutorial under the user account that you started the server as. [1]
You can also create databases with other names. PostgreSQL allows you to create any number of databases at a given site. Database names must have an alphabetic first character and are limited to 63 bytes in length. A convenient choice is to create a database with the same name as your current user name. Many tools assume that database name as the default, so it can save you some typing. To create that database, simply type:
$
createdb
If you do not want to use your database anymore you can remove it. For example, if you are the owner (creator) of the database mydb
, you can destroy it using the following command:
$
dropdb mydb
(For this command, the database name does not default to the user account name. You always need to specify it.) This action physically removes all files associated with the database and cannot be undone, so this should only be done with a great deal of forethought.
More about createdb
and dropdb
can be found in createdb and dropdb respectively.
Введение
PostgreSQL известна своей мощностью, гибкостью и поддержкой широкого спектра функций, что делает ее идеальным выбором для разработчиков и администраторов баз данных. Независимо от того, предпочитаете ли вы работать с графическими инструментами или командной строкой, эта статья поможет понять основные шаги и даст практические рекомендации для создания и управления базами данных в PostgreSQL.
Подготовка инфраструктуры
Для начала работы потребуется PostgreSQL. Мы уже рассказывали в Академии Selectel, как развернуть БД самостоятельно на виртуальной машине. А в этой статье рассмотрим управление на основе услуги Облачные базы данных, когда пользователю предоставляется доступ только к БД (без доступа к ОС).
Подробнее, что такое облачные базы данных и в чем отличие от аренды целого сервера, рассказываем ниже в разделе «PostgreSQL на инфраструктуре Selectel».
Как создать БД в панели управления Selectel
Чтобы создать новый кластер БД Selectel, выполните следующее.
- Перейдите в панель управления.
- В левой части окна выберите Облачная платформа.
- В открывшемся окне перейдите на вкладку Базы данных.
- Нажмите Создать кластер.
- Выберите необходимую конфигурацию кластера и нажмите кнопку Создать кластер.
Когда кластер будет создан, он отобразится в той же вкладке Базы данных в статуте Active.
Для организации БД в новом кластере нужно сначала создать нового пользователя.
Примечание
Знакомая всем база данных Postgres и одноименный суперпользователь по умолчанию в Selectel недоступны во избежание инцидентов ИБ.
В своем кластере БД перейдите на вкладку Пользователи и нажмите кнопку Создать пользователя.
Заполните имя и пароль нового пользователя и нажмите Создать.
Перейдите на вкладку Базы данных.
Теперь, чтобы начать работу, создайте базу данных: выберите для нее имя, владельца и локали. К созданной базе вы можете добавить расширения и дать доступ новым пользователям.
Теперь можно подключиться к созданной базе данных и управлять ею любым удобным способом. Другие возможности кластера БД от Selectel описаны ниже и на странице продукта.
Кому подходит СУБД PostgreSQL на инфраструктуре Selectel
DBaaS (Database as a Service) — это облачное решение, которое позволяет пользователям управлять базами данных, не беспокоясь о настройке и обслуживании серверной инфраструктуры. Оно походит тем, кто хочет сосредоточиться на развитии продукта, а не на управлении инфраструктурой.
При аренде сервера пользователь получает полный доступ к ОС и должен самостоятельно устанавливать и настраивать ПО, а также следить за обновлениями, производительностью, резервным копированием и безопасностью.
При использовании DBaaS пользователь получает готовую к работе базу данных с рядом преимуществ.
- Полностью управляемое решение. Selectel берет на себя все задачи по управлению инфраструктурой. Пользователю не нужно думать о настройке, резервировании и безопасности — все автоматизировано.
- Высокая отказоустойчивость. PostgreSQL на платформе Selectel разворачивается в надежных дата-центрах с обеспечением высокой доступности. Если один из узлов откажет, система продолжит работу без простоев, а резервные копии позволят быстро восстановить данные.
- Безопасность. Облачные базы данных соответствуют российским и международным стандартам: закону 152-ФЗ, приказу ФСТЭК № 21, PCI DSS, ISO 27001, 27017, 27018.
- Master Discovery. В услуге представлена встроенная система поиска актуального мастера на базе DNS. При аварийной ситуации и смене мастера система в реальном времени перенаправит запросы клиентского приложения к новому IP-адресу.
- Гибкость и масштабируемость. Вы можете гибкого изменять ресурсы базы данных в зависимости от потребностей приложения. При росте нагрузки просто поменяйте конфигурацию облачного сервера и количество реплик. Доступно как горизонтальное, так и вертикальное масштабирование.
- Интеграция с другими сервисами Selectel. DBaaS легко интегрируется с другими решениями, такими как выделенные серверы, DAVM, Kubernetes, сети и сервисы безопасности. Это позволяет создать полноценную и безопасную экосистему для работы с данными.
- Поддержка и документация. Selectel предоставляет детальную документацию и круглосуточную техническую поддержку, что упрощает процесс использования DBaaS и помогает быстро решать возникающие проблемы.
Как создать БД в графическом инструменте pgAdmin
Для работы с СУБД PostgreSQL через графический интерфейс можно использовать pgAdmin — популярный инструмент для администрирования баз данных.
Установка
Для начала скачайте установочный файл: перейдите на официальный сайт pgAdmin и выберите подходящую версию операционной системы (Windows, macOS или Linux).
После загрузки следуйте инструкции для вашей системы.
Windows. Запустите установочный файл, примите лицензионное соглашение и выберите папку для установки. В процессе убедитесь, что выбраны все компоненты, включая сам pgAdmin и все необходимые зависимости. После завершения установки pgAdmin будет готов к использованию.
macOS. Откройте загруженный файл и перенесите pgAdmin в папку Applications. После этого pgAdmin можно запустить из папки приложений.
Linux. Для установки выполните несколько команд в терминале. Например, для Ubuntu:
- Установите открытый ключ для репозитория.
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
- Создайте файл конфигурации репозитория.
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
- Установите pgAdmin.
sudo apt install pgadmin4
Запуск и подключение
После успешной установки запустите pgAdmin. При первом запуске вас попросят ввести пароль для администрирования интерфейса pgAdmin. Он будет использоваться для доступа к pgAdmin при каждом запуске.
Теперь, когда pgAdmin запущен, необходимо подключиться к серверу PostgreSQL.
В главном окне pgAdmin нажмите правой кнопкой мыши на Servers и выберите Register → Server...
В открывшемся окне создания нового подключения укажите:
- Name — имя для вашего сервера. Например, Selectel.
Перейдите на вкладку Connection и заполните следующие поля.
- Host name/address — адрес сервера PostgreSQL. Если вы работаете локально, используйте localhost.
Примечание
Если требуется добавить сервер PostgreSQL, созданный в кластере БД Selectel, необходимо перейти к своему кластеру, скопировать на вкладке Подключение его DNS-адрес и вставить в pgAdmin в поле Host name/address.
Например, master.6e0c4e3c-f801-445e-ba5c-63ba087f67a1.c.dbaas.selcloud.ru.
Почему мы рекомендуем использовать DNS, а не IP-адреса?
Наша система Master-Discovery реализована на базе доменных имен. Таким образом DNS-адреса соответствуют ролям нод и ведут на актуальные IP-адреса мастера и реплик. IP-адреса соответствуют конкретным нодам. В случае недоступности мастера одна из реплик возьмет на себя его роль. IP-адрес мастера изменится, и подключение по IP перестанет работать.
- Port — порт для подключения к серверу. Мы советуем использовать 5433 – порт для подключения через пулер соединений, который позволяет снизить нагрузку на PostgreSQL.
- Maintenance Database — имя базы данных, которое вы задали в панели управления.
- Username — имя пользователя из панели управления.
- Password — пароль пользователя PostgreSQL.
- Нажмите Save, чтобы сохранить подключение. Теперь вы подключены к серверу PostgreSQL и можете управлять базами данных через pgAdmin.
Если при попытке добавления нового сервера вы получаете ошибку вида:
Unable to connect to server: connection failed: connection to server at "127.0.0.1" port 5433 failed: FATAL: password authentication failed for user "postgres" connection to server at "127.0.0.1", port 5433 failed: FATAL: password authentication failed for user "postgres"
… подключитесь к PostgreSQL через терминал и сбросьте пароль для указанного пользователя:
sudo -i -u postgres
psql
\password postgres
[Указать новый пароль]
[Повторить ввод нового пароля]
Создание БД
После подключения к серверу PostgreSQL через pgAdmin для создания новой базы данных выполните следующие шаги:
В левом меню pgAdmin найдите подключенный сервер, нажмите на него правой кнопкой мыши и выберите Create → Database…
В открывшемся окне заполните поля:
- Database. Введите название для новой базы данных, например, database_from_pgadmin.
- Owner. Выберите пользователя, который будет владельцем базы данных. По умолчанию это postgres, но можно выбрать любого другого пользователя.
Нажмите Save, чтобы создать базу данных.
Создание таблицы
Теперь ваша база данных PostgreSQL отображается в списке pgAdmin. Создадим таблицу в одной из схем новой БД.
Схема (schema) — это логическая структура, которая организует таблицы, представления, функции, индексы и другие объекты внутри одной базы данных. Они помогают разделять объекты, обеспечивают более четкую организацию и контроль доступа к данным. Каждая БД может содержать несколько схем, и каждая схема содержит свои объекты.
Разверните список Servers, выберите нужный сервер и базу данных, в которой хотите создать таблицу. Например, Databases → selectel_db → Schemas → public → Tables.
Нажмите правой кнопкой мыши на Tables в дереве объектов и выберите Create → Table…
Заполните следующие поля.
- Name — название таблицы. Например, employees.
- Owner — пользователь, который будет владельцем таблицы.
- Schema — обычно используется схема public, но если у вас есть другие схемы, можете выбрать нужную.
Перейдите на вкладку Columns для определения столбцов таблицы. Нажмите на кнопку +, чтобы добавить новый столбец, и укажите следующие параметры.
- Name — имя столбца, например, id, first_name, last_name, email.
- Data type — тип данных столбца. Например, serial, varchar, integer, и т.д.
- Primary Key? — если это ключевой столбец, например, id, поставьте галочку напротив чекбокса.
- Not NULL? — если столбец должен быть обязательным, отметьте этот параметр.
Повторите процесс для всех столбцов, которые нужно добавить. Затем нажмите Save, чтобы сохранить таблицу.
Как создать БД в командной строке
Для тех, кто предпочитает работу через терминал, PostgreSQL предоставляет утилиту командной строки — psql.
Для установки psql на Linux используйте консольную команду:
sudo apt install postgresql postgresql-contrib
Подключение к БД
- Откройте терминал. Подключитесь к серверу PostgreSQL:
psql -h <IP_server> -p <port> -U <username> -d <db_name>
Примечание
Для подключения к PostgreSQL, расположенной на локальном устройстве, можно просто выполнить команду psql без параметров.
Базовые настройки через psql
После подключения к PostgreSQL с помощью утилиты psql можно приступить к настройке и управлению сервером баз данных. Рассмотрим основные команды, которые помогут настроить начальные параметры и подготовить базу данных к дальнейшей работе.
Параметры конфигурации PostgreSQL
PostgreSQL позволяет настраивать различные параметры конфигурации: кодировку данных, язык сообщений, уровень логирования и многое другое. Для этого используются команды языка SQL. Чтобы изменить текущие настройки сеанса, используйте команду SET. Например, для изменения языка сообщений на русский:
SET lc_messages = 'ru_RU.UTF-8';
Также можете изменить кодировку для работы с текстовыми данными:
SET client_encoding = 'UTF8';
Чтобы увидеть текущее значение настроек, используйте команду:
SHOW lc_messages;
Управление пользователями и ролями
Пользователи и роли в PostgreSQL играют ключевую роль в управлении доступом к базе данных.
Чтобы добавить нового пользователя в PostgreSQL, введите команду CREATE ROLE или CREATE USER. Например:
CREATE USER myuser WITH PASSWORD 'mypassword';
После создания пользователя ему необходимо назначить права на выполнение операций в базе данных. Например, чтобы предоставить права на создание базы данных, выполните следующий код:
ALTER USER myuser CREATEDB;
Получение справки и помощи в psql
Иногда в процессе работы с PostgreSQL бывает нужно быстро получить информацию о доступных командах или синтаксисе. В этом случае утилита psql предоставляет справочную систему.
Команда \help в psql выводит справку по командам SQL. Например, чтобы узнать больше о команде CREATE DATABASE, выполните:
\help CREATE DATABASE
Помимо SQL-команд, psql поддерживает множество встроенных команд, которые начинаются с обратного слэша (\). Вот некоторые из наиболее полезных:
- \l — выводит список всех баз данных;
- \dt — отображает список всех таблиц в текущей базе данных;
- \du — выводит список всех пользователей и ролей;
- \c <db_name> — подключение к конкретной базе данных;
- \dn — выводит список всех схем в базе данных.
Чтобы узнать больше о встроенных командах, используйте \? в терминале psql. Например, чтобы увидеть список всех доступных команд psql:
\?
Создание базы данных: CREATE DATABASE
Теперь перейдем к созданию новой базы данных. В PostgreSQL для этого используется команда CREATE DATABASE:
CREATE DATABASE <db_name>;
После создания базы данных для дальнейшей работы следует подключиться к ней с помощью команды:
\c <db_name>
Работа с таблицами
Создание таблицы: CREATE TABLE
Теперь, когда вы подключены к БД, можно приступить к созданию таблицы. В PostgreSQL таблицы создаются с помощью команды CREATE TABLE.
Для создания таблицы необходимо определить ее структуру: столбцы, их типы данных и возможные ограничения. Пример создания таблицы для хранения информации о сотрудниках:
CREATE TABLE IF NOT EXISTS employees (
employee_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
hire_date DATE
);
В этом примере создается таблица employees с пятью столбцами:
- employee_id — уникальный идентификатор сотрудника, создается автоматически при помощи типа данных SERIAL;
- first_name и last_name — текстовые поля для хранения имени и фамилии;
- department — строка, обозначающая отдел, к которому относится сотрудник;
- hire_date — дата приема на работу.
Для проверки, что таблица успешно создана, можно использовать команду:
\d employees
Эта команда выведет описание таблицы employees, включая ее структуру и типы данных.
Удаление таблицы: DROP TABLE
Для удаления таблицы из базы данных PostgreSQL используется SQL-запрос:
DROP TABLE <db_name>;
Создание резервной копии БД: pg_dump, pg_restore
Регулярное создание резервных копий баз данных — важная практика, которая помогает избежать потери данных в случае сбоев системы или непредвиденных ситуаций. PostgreSQL предоставляет встроенные инструменты для создания бэкапов с помощью утилиты pg_dump.
Создание
pg_dump -U <username> -h <host> -p <port> -d <database_name> -F c -f /path/to/backup_file.backup
- -U <username> — имя пользователя PostgreSQL;
- -h <host> — адрес сервера базы данных, например, localhost;
- -p <port> — порт для подключения к серверу;
- -d <db_name> — имя базы данных, которую нужно сохранить;
- -F c — формат архива, в данном случае c = custom;
- -f /path/to/backup_file.backup — путь и имя файла для сохранения резервной копии.
Для создания резервной копии базы данных employees на локальном сервере с пользователем postgres следует выполнить команду:
pg_dump -U postgres -d employees -F c -f ~/backups/mydb_backup.backup
Восстановление
Чтобы восстановить базу данных из резервной копии, созданной с помощью pg_dump, можно воспользоваться утилитой pg_restore. Она позволяет восстановить данные из резервной копии, выполненной в формате архива.
Сперва создайте новую базу данных — в нее будут восстанавливаться данные. Для этого используйте команду createdb:
createdb -U <username> -h <host> -p <port> <new_db_name>
Затем восстановите данные из резервной копии. В этом поможет команда pg_restore:
pg_restore -U <username> -h <host> -p <port> -d <new_db_name> /path/to/backup_file.backup
И в конце убедитесь, что данные восстановлены корректно, проверив таблицы в новой БД.
Заключение
В статье подробно рассказали, как создать базу данных в PostgreSQL различными способами: в панели управления Selectel, с помощью графического интерфейса pgAdmin и через командную строку утилитой psql.
Узнать больше о работе с PostgreSQL можно в одном из наших курсов в Академии Selectel.
CREATE DATABASE — create a new database
Synopsis
CREATE DATABASEname
[ WITH ] [ OWNER [=]user_name
] [ TEMPLATE [=]template
] [ ENCODING [=]encoding
] [ STRATEGY [=]strategy
] [ LOCALE [=]locale
] [ LC_COLLATE [=]lc_collate
] [ LC_CTYPE [=]lc_ctype
] [ ICU_LOCALE [=]icu_locale
] [ LOCALE_PROVIDER [=]locale_provider
] [ COLLATION_VERSION =collation_version
] [ TABLESPACE [=]tablespace_name
] [ ALLOW_CONNECTIONS [=]allowconn
] [ CONNECTION LIMIT [=]connlimit
] [ IS_TEMPLATE [=]istemplate
] [ OID [=]oid
]
Description
CREATE DATABASE
creates a new PostgreSQL database.
To create a database, you must be a superuser or have the special CREATEDB
privilege. See CREATE ROLE.
By default, the new database will be created by cloning the standard system database template1
. A different template can be specified by writing TEMPLATE
. In particular, by writing name
TEMPLATE template0
, you can create a pristine database (one where no user-defined objects exist and where the system objects have not been altered) containing only the standard objects predefined by your version of PostgreSQL. This is useful if you wish to avoid copying any installation-local objects that might have been added to template1
.
Parameters
name
-
The name of a database to create.
user_name
-
The role name of the user who will own the new database, or
DEFAULT
to use the default (namely, the user executing the command). To create a database owned by another role, you must be a direct or indirect member of that role, or be a superuser. template
-
The name of the template from which to create the new database, or
DEFAULT
to use the default template (template1
). encoding
-
Character set encoding to use in the new database. Specify a string constant (e.g.,
'SQL_ASCII'
), or an integer encoding number, orDEFAULT
to use the default encoding (namely, the encoding of the template database). The character sets supported by the PostgreSQL server are described in Section 24.3.1. See below for additional restrictions. strategy
-
Strategy to be used in creating the new database. If the
WAL_LOG
strategy is used, the database will be copied block by block and each block will be separately written to the write-ahead log. This is the most efficient strategy in cases where the template database is small, and therefore it is the default. The olderFILE_COPY
strategy is also available. This strategy writes a small record to the write-ahead log for each tablespace used by the target database. Each such record represents copying an entire directory to a new location at the filesystem level. While this does reduce the write-ahead log volume substantially, especially if the template database is large, it also forces the system to perform a checkpoint both before and after the creation of the new database. In some situations, this may have a noticeable negative impact on overall system performance. locale
-
This is a shortcut for setting
LC_COLLATE
andLC_CTYPE
at once.Tip
The other locale settings lc_messages, lc_monetary, lc_numeric, and lc_time are not fixed per database and are not set by this command. If you want to make them the default for a specific database, you can use
ALTER DATABASE ... SET
. lc_collate
-
Collation order (
LC_COLLATE
) to use in the new database. This affects the sort order applied to strings, e.g., in queries with ORDER BY, as well as the order used in indexes on text columns. The default is to use the collation order of the template database. See below for additional restrictions. lc_ctype
-
Character classification (
LC_CTYPE
) to use in the new database. This affects the categorization of characters, e.g., lower, upper and digit. The default is to use the character classification of the template database. See below for additional restrictions. icu_locale
-
Specifies the ICU locale ID if the ICU locale provider is used.
locale_provider
-
Specifies the provider to use for the default collation in this database. Possible values are:
icu
,libc
.libc
is the default. The available choices depend on the operating system and build options. collation_version
-
Specifies the collation version string to store with the database. Normally, this should be omitted, which will cause the version to be computed from the actual version of the database collation as provided by the operating system. This option is intended to be used by
pg_upgrade
for copying the version from an existing installation.See also ALTER DATABASE for how to handle database collation version mismatches.
tablespace_name
-
The name of the tablespace that will be associated with the new database, or
DEFAULT
to use the template database’s tablespace. This tablespace will be the default tablespace used for objects created in this database. See CREATE TABLESPACE for more information. allowconn
-
If false then no one can connect to this database. The default is true, allowing connections (except as restricted by other mechanisms, such as
GRANT
/REVOKE CONNECT
). connlimit
-
How many concurrent connections can be made to this database. -1 (the default) means no limit.
istemplate
-
If true, then this database can be cloned by any user with
CREATEDB
privileges; if false (the default), then only superusers or the owner of the database can clone it. oid
-
The object identifier to be used for the new database. If this parameter is not specified, PostgreSQL will choose a suitable OID automatically. This parameter is primarily intended for internal use by pg_upgrade, and only pg_upgrade can specify a value less than 16384.
Optional parameters can be written in any order, not only the order illustrated above.
Notes
CREATE DATABASE
cannot be executed inside a transaction block.
Errors along the line of “could not initialize database directory” are most likely related to insufficient permissions on the data directory, a full disk, or other file system problems.
Use DROP DATABASE
to remove a database.
The program createdb is a wrapper program around this command, provided for convenience.
Database-level configuration parameters (set via ALTER DATABASE
) and database-level permissions (set via GRANT
) are not copied from the template database.
Although it is possible to copy a database other than template1
by specifying its name as the template, this is not (yet) intended as a general-purpose “COPY DATABASE
” facility. The principal limitation is that no other sessions can be connected to the template database while it is being copied. CREATE DATABASE
will fail if any other connection exists when it starts; otherwise, new connections to the template database are locked out until CREATE DATABASE
completes. See Section 23.3 for more information.
The character set encoding specified for the new database must be compatible with the chosen locale settings (LC_COLLATE
and LC_CTYPE
). If the locale is C
(or equivalently POSIX
), then all encodings are allowed, but for other locale settings there is only one encoding that will work properly. (On Windows, however, UTF-8 encoding can be used with any locale.) CREATE DATABASE
will allow superusers to specify SQL_ASCII
encoding regardless of the locale settings, but this choice is deprecated and may result in misbehavior of character-string functions if data that is not encoding-compatible with the locale is stored in the database.
The encoding and locale settings must match those of the template database, except when template0
is used as template. This is because other databases might contain data that does not match the specified encoding, or might contain indexes whose sort ordering is affected by LC_COLLATE
and LC_CTYPE
. Copying such data would result in a database that is corrupt according to the new settings. template0
, however, is known to not contain any data or indexes that would be affected.
There is currently no option to use a database locale with nondeterministic comparisons (see CREATE COLLATION
for an explanation). If this is needed, then per-column collations would need to be used.
The CONNECTION LIMIT
option is only enforced approximately; if two new sessions start at about the same time when just one connection “slot” remains for the database, it is possible that both will fail. Also, the limit is not enforced against superusers or background worker processes.
Examples
To create a new database:
CREATE DATABASE lusiadas;
To create a database sales
owned by user salesapp
with a default tablespace of salesspace
:
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
To create a database music
with a different locale:
CREATE DATABASE music LOCALE 'sv_SE.utf8' TEMPLATE template0;
In this example, the TEMPLATE template0
clause is required if the specified locale is different from the one in template1
. (If it is not, then specifying the locale explicitly is redundant.)
To create a database music2
with a different locale and a different character set encoding:
CREATE DATABASE music2 LOCALE 'sv_SE.iso885915' ENCODING LATIN9 TEMPLATE template0;
The specified locale and encoding settings must match, or an error will be reported.
Note that locale names are specific to the operating system, so that the above commands might not work in the same way everywhere.
Compatibility
There is no CREATE DATABASE
statement in the SQL standard. Databases are equivalent to catalogs, whose creation is implementation-defined.
PostgreSQL — одна из самых популярных и мощных систем управления реляционными базами данных (СУБД). У неё открытый исходный код, плюс она абсолютно бесплатная. Система помогает создавать и хранить базы данных, а также работать с ними на языке SQL (Structured Query Language). Без СУБД это будет невозможно, поскольку технически БД — это просто файлы в определённом формате.
PostgreSQL используется как для небольших проектов, так и для крупных корпоративных приложений благодаря своей надёжности, расширяемости и поддержке обширного набора SQL-стандартов.
На первый взгляд кажется, что работа с PostgreSQL — непростая задача. Действительно, начинающим программистам синтаксис и команды системы могут быть непривычны, но со временем это чувство проходит. В этом руководстве мы собрали всё, что нужно для старта программирования в PostgreSQL — от установки до первых запросов.
В прошлом году PostgreSQL заняла четвёртую строчку в рейтинге самых популярных СУБД, уступив только Oracle, MySQL и Microsoft SQL Server. Вот несколько её преимуществ:
- Опенсорс. PostgreSQL — это СУБД с открытым исходным кодом. Это значит, что она доступна для использования, модификации и распространения без каких-либо лицензионных сборов.
- Надёжность. Эта система предоставляет несколько уровней защиты данных и механизмов восстановления после сбоев, что гарантирует минимальные потери данных и стабильную работу системы. Среди механизмов надежности — журналирование транзакций (Write-Ahead Logging, WAL) и поддержка транзакции ACID.
- Полная поддержка SQL-стандартов. PostgreSQL позволяет выполнять сложные запросы SQL, включая вложенные и агрегированные, поддерживает различные типы данных от базовых числовых и строковых типов до сложных JSON и XML, а также предлагает расширенные функции: оконные функции, общие табличные выражения (CTE) и множество встроенных функций для работы с датами, строками и географическими данными.
- Объектно-реляционная модель. СУБД поддерживает одновременно реляционный подход, то есть данные хранятся в виде записей, которые связаны друг с другом с помощью relations (отношения), и объектный подход, то есть данные представлены в виде объектов с атрибутами и методами, как в объектно-ориентированном программировании (ООП).
- Поддержка JSON и NoSQL. PostgreSQL предлагает средства для работы с JSON-документами, что позволяет использовать его как гибридную СУБД, объединяющую реляционные и NoSQL подходы. Она поддерживает два формата хранения JSON: JSON (текстовый) и JSONB (бинарный). JSONB оптимизирован для быстрого поиска и индексирования.
- Мощные средства индексирования. Среди типов индексов в этой системе управления БД — B-Tree, Hash, GIN и GiST, BRIN.
- Возможность использовать другие языки программирования. Postgre позволяет писать собственные функции и поддерживает больше языков программирования, чем остальные СУБД. Среди них — C, C++, Python, Java, PHP, Ruby, Lua и даже JavaScript (есть поддержка V8).
Кстати, на основе PostgreSQL создана отечественная СУБД Postgres Pro — в качестве замены Oracle. В рамках импортозамещения российским аналогом пользуются многие крупные компании и организации, например, Сбер, ФНС, Минфин, «Газпромнефть» и другие.
Как установить и запустить PostgreSQL
Перед тем как приступить к установке PostgreSQL, нужно определить, какая версия вам нужна. Каждая версия PostgreSQL включает обновления, улучшения и новые функции — выбор зависит от совместимости с вашими приложениями. Мы будем рассматривать установку и запуск на трёх операционных системах на примере последней 16 версии.
Для работы с PostgreSQL на Windows и macOS может понадобится графический интерфейс pgAdmin. В нем есть Query Tool, с помощью которого пишутся и выводятся SQL-запросы.
Установка и запуск на Windows
- Скачайте установочный файл с официального сайта PostgreSQL.
- Запустите установку. В появившемся мастере установки следуйте этим шагам:
- Выберите директорию установки и отметьте галочкой эти компоненты:
Компоненты для установки PostgreSQL
- Укажите данные и задайте пароль для суперпользователя (обычно это postgres):
Меню для ввода пароля
- Настройте порт для сервера (по умолчанию это 5432).
- Определите каталог для хранения данных.
3. После установки откройте pgAdmin и подключитесь к вашему новому серверу. Уже в этом интерфейсе вы будете создавать базы данных и таблицы и писать SQL-запросы.
Интерфейс pgAdmin
Установка на macOS
Установить СУБД на macOS можно тремя способами.
- С помощью интерактивного установщика от EDB. Его нужно скачать с официального сайта. Утилита уже включает в себя сервер PostgreSQL, pgAdmin и StackBuilder — менеджер пакетов, который можно использовать для загрузки и установки дополнительных инструментов и драйверов.
- Postgreapp. Это полнофункциональная программа для установки PostgreSQL, которая работает как стандартное приложение для Mac. Она включает в себя все необходимое для начала работы, даже популярное расширение PostGIS для геоданных.
- Через Homebrew. Homebrew — популярный пакетный менеджер для macOS. Убедитесь, что он установлен, и выполните команду:
После установки инициализируйте базу данных и запустите сервер:
initdb /usr/local/var/postgres
pg_ctl -D /usr/local/var/postgres start
Убедитесь, что сервер работает с помощью команды psql:
Установка на Linux
- Для установки на Ubuntu/Debian используйте команду в консоли:
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
Для CentOS/RHEL:
sudo yum install postgresql-server postgresql-contrib
На Ubuntu и Debian PostgreSQL автоматически инициализируется и запускается.
- На CentOS и RHEL выполните:
sudo postgresql-setup initdb
sudo systemctl start postgresql
На Linux тоже есть pgAdmin — его нужно скачать отдельно, однако он открывается не в приложении, а окне браузера. Однако большинство разработчиков, использующих эту операционную систему, работают с PostgreSQL в основном в консоли с помощью psql.
Основные команды SQL
SQL-команд очень много — о них можно почитать в официальной документации PostgreSQL. Но есть те, которыми вы будете пользоваться большую часть времени. Вот несколько основных команд:
CREATE
— и все её вариации: CREATE DATABASE
, CREATE TABLE
, CREATE DOMAIN
, CREATE USER
и другие.
ALTER | DROP
— изменить/удалить данные СУБД.
INSERT | UPDATE | DELETE/TRUNCATE
— вставить/изменить/удалить данные в таблице.
SELECT, TABLE, WITH
— получить строки из таблицы или представления.
Типы данных PostgreSQL
Прежде чем создавать базы данных и таблицы, нужно разобраться в основных типах данных этой СУБД. В PostgreSQL есть базовые и расширенные типы данных. Ниже рассмотрим основные (подробнее можно почитать в документации на русском языке).
Числовые типы
Числовые типы включают 2-, 4- и 8-байтные целые, 4- и 8-байтные числа с плавающей точкой, а также десятичные числа с задаваемой точностью.
Числовые типы данных PostgreSQL
Денежные типы
Здесь все проще, тип всего один.
Денежные типы данных
Символьные типы
В SQL есть два основных символьных типа: character varying(n) и character(n), где n — положительное число. Они могут хранить текстовые строки длиной до n символов.
Символьные типы данных
Типы даты/времени
Дата и время в PostgreSQL хранятся в целочисленном виде и считаются по Григорианскому календарю.
Типы времени/даты
Логический тип
В СУБД есть стандартный SQL-тип boolean, который может иметь состояния «true», «false» и «unknown» (оно представляется SQL-значением NULL).
Логический тип данных
Создаем первую таблицу в PostgreSQL
Для начала нужно завести базу данных:
CREATE DATABASE mydatabase
Это создаст новую базу данных с именем mydatabase. Затем подключаемся к нашей БД:
Теперь можно создавать таблицу. Синтаксис выглядит следующим образом:
CREATE TABLE table_name (
column1_name data_type [column_constraint],
column2_name data_type [column_constraint],
...
table_constraint
);
где
table_name
: название новой таблицы.
column1_name
, column2_name
: названия столбцов в таблице.
data_type
: тип данных столбца (например, INTEGER,
VARCHAR(100
), DATE
).
column_constraint
: опциональные ограничения на уровне столбца (например, NOT NULL, UNIQUE).
table_constraint
: опциональные ограничения на уровне таблицы (например, PRIMARY KEY
, FOREIGN KEY
).
Рассмотрим пример создания таблицы employees с различными типами данных и ограничениями:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
hire_date DATE NOT NULL,
salary NUMERIC(10, 2),
department_id INTEGER REFERENCES departments(id)
);
После выполнения этого SQL-запроса в вашей БД появится таблица employees с указанными столбцами и ограничениями (PRIMARY KEY
, UNIQUE
, NOT NULL
и так далее).
Чтобы удалить базу данных или таблицу, понадобится команда drop
:
drop database <database_name>
drop table <table_name>
Модификация таблиц
Если вы допустили ошибку при оформлении таблицы, PostgreSQL предоставляет мощный набор команд для изменения ее структуры без необходимости удаления.
Добавление столбца
ALTER TABLE employees ADD COLUMN bio TEXT;
Эта команда добавляет новый столбец bio
типа TEXT
в таблицу employees
.
Удаление столбца
ALTER TABLE employees DROP COLUMN bio;
Удаляет столбец bio
из таблицы employees
.
Изменение типа данных столбца
ALTER TABLE employees ALTER COLUMN email TYPE VARCHAR(150);
Изменяет тип данных столбца email
на VARCHAR(150)
.
Получение информации о таблице
Команда выводит информацию о структуре таблицы employees
, включая список столбцов, их типы данных и ограничения.
Изменение данных в таблице
PostgreSQL также имеет много функций для модификации строк и колонок в таблице. Ниже несколько примеров.
Добавление новой записи
INSERT INTO employees (last_name, email) VALUES ('Ivanov', 'ivanivanov@example.com');
Вставляет новую запись в таблицу employees
с указанными значениями для last_name
и email
.
Изменение существующих данных
UPDATE employees
SET email = 'ivan_ivanov@example.com'
WHERE last_name = 'ivanov';
Обновляет адрес электронной почты пользователя с фамилией ivanov
.
Удаление записей
DELETE FROM employees
WHERE last_name = 'ivanov';
Удаляет записи из таблицы employees
, где last_name
равен ivanov
.
Запросы с командой SELECT
Выбор всех записей из таблицы:
Фильтрация данных:
SELECT * FROM employees
WHERE email LIKE '%@example.com';
Сортировка данных:
SELECT * FROM employees
ORDER BY hire_date
DESC;
Команда сортирует записи по столбцу hire_date
в порядке убывания.
Группировка данных:
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
Запрос вернет список департаментов и количество сотрудников в каждом из них.
Это наиболее простые запросы в PostgreSQL. Сложные будут включать, например, объединение данных через оператор JOIN (INNER JOIN
, LEFT JOIN
, RIGHT JOIN
и другие).
Как оптимизировать выполнение запросов
С помощью индексов
Индексы играют важную роль в оптимизации выполнения запросов. PostgreSQL позволяет создавать индексы на одном или нескольких столбцах таблицы.
Создание индекса:
CREATE INDEX idx_username ON employees(last_name);
Этот индекс ускоряет поиск записей по last_name
.
Использование уникальных индексов:
CREATE UNIQUE INDEX idx_unique_email ON employees(email);
Он обеспечивает уникальность значений в столбце email.
С помощью транзакций и блокировок
Транзакции позволяют группировать несколько операций в одну атомарную операцию. PostgreSQL также поддерживает механизмы блокировки для обеспечения согласованности данных.
Начало и завершение транзакции:
BEGIN;
UPDATE employees
SET email = 'ivan_updated@example.com'
WHERE last_name = 'ivanov';
COMMIT;
Откат транзакции:
BEGIN;
UPDATE employees
SET email = 'ivan_failed@example.com'
WHERE last_name = 'ivanov';
ROLLBACK;
PostgreSQL — мощная и многофункциональная СУБД. В этом руководстве мы рассмотрели основные аспекты установки, создания баз данных и выполнения простых SQL-запросов. На самом деле PostgreSQL не такая страшная, как кажется на первый взгляд. Главное — знать азы.
PostgreSQL Create Database and Table Tutorial (Step by Step). In this article, we will look at how to create a database and table on PostgreSQL.
What is PostgreSQL
PostgreSQL is a free object relational database system with over 30 years of active development and featuring SQL compliance. PostgreSQL, commonly known as Postgres is a free open source Object Relational Database Management System (ORDBMS), launched in the late nineties by the University of California, Berkley. They designed it to handle a wide variety of workloads from single machines to data warehouses and it is state of the art software.
PostgreSQL features
- Atomicity, consistency, isolation and durability. So called (ACID) properties that display updatable views, foreign, triggers and stored procedures.
- It is available for windows and Linux systems.
- Compatible with various programming languages: It supports multiple programming interfaces such as C/C++, JAVA, Python, Perl, Ruby.
- Supports data integrity ( Primary Keys, Foreign Keys).
- Exclusion Constraints.
- Support multiple features of SQL.
- Highly extensible and secure ( LDAP)
- Postgres community is very helpful and accommodating to guide new users. The project continues to evolve under the alias PostgreSQL License.
For these reasons, it is the favorable solution for making databases and tables.
Connect to PostgreSQL Database from Windows Command Line
Open pgAdmin4 database and click Create Database.
CREATE DATABASE guru99
WITH OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'English_India.1252'
LC_CTYPE = 'English_India.1252'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
COMMENT ON DATABASE guru99
IS 'Database for Guru99'
Create a Database in PostgreSQL
Next section OF PostgreSQL Create Database and Table is to create a database. The process is relatively simple and easy. You need to follow the steps below to create your own database. Bear in mind that installing RDMBS on Windows 10 is quite complicated process and requires reasonable level of expertise. So, we will start by teaching you how to connect to PostgreSQL database through the Windows 10 command prompt.
1. Establish the Environment Variable on Windows 10
- Before using the CLI to access PostgreSQL, you first need to establish your system’s environment variable. Failure to do so will result in future complications. Type ‘’env’’ in the Windows search bar and proceed to the ‘’Edit the system environment variables’’ option.
- After navigating to the mentioned option, you will be redirected to system properties, where you need to click on the Environment Variables Button under the Advanced tab.
- Then go to the path option located in the system variables section. This enables you to access the PostgreSQL environment easily from the Windows command prompt.
- Add a new path by copying and pasting the path of your PostgreSQL server’s bin directory at the required location, then click OK and close the System Properties Window.
2. Launch Windows Command Prompt
Following step of PostgreSQL Create Database and Table Tutorial (Step by Step) is to do the following:
- After the above-mentioned step, proceed to the windows search bar and type cmd
- Choose the icon of the command prompt
- The default Command Prompt window will become visible with no commands initiated
3. Use Command Prompt to Access PostgreSQL Environment
In order to get to your PostgreSQL environment through command prompt, you will need to use the following command:
- The Postgres in the above command represents the default username for the PostgreSQL server
- You can choose to create a new user during or after the installation of the PostgreSQL server
- If you have not created a new user, then the default username will remain ‘’Postgres’’
- After running the command above, you will be required to provide your user account password, which is created during the PostgreSQL server’s installation
- After entering the correct password, you will be able to access the PostgreSQL environment without exiting the Windows command prompt.
4. Create PostgreSQL Database
Next step in PostgreSQL Create Database and Table Tutorial (Step by Step) is to:
- Create a database, if you have already created one, then feel free to skip ahead in the tutorial.
- Use the following command to create database:
CREATE DATABASE sampleDB WITH ENCODING 'UTF8' LC_COLLATE=‘English_United States' LC_CTYPE=‘English_United States';
- SampleDB represents the database name
- If you have followed the previous steps correctly, then you will get a ‘’CREATE DATABASE’’ on your command prompt
5. Establish connection between the newly created PostgreSQL Database
- Execute the following command to allow connection of the database:
- At this step, sampleDB represents the database to which you want to connect, this can be replaced with desired PostgreSQL database. If you have followed the steps correctly, you will be able to establish connection to the database, but there will be no acknowledgement on the command prompt.
Create a Table in PostgreSQL
CREATE TABLE Products
(
ProductCode int primary key,
ProductName varchar(50) not null,
PurchaseDate date
)
In order to create a table in PostgreSQL, you need to follow a series of simple steps given below. This tutorial is easy to follow and helps you save hours of work.
Syntax
In order to create a table, you need to use the CREATE TABLE statement, as a relational database consists of multiple tables which are interrelated. Below is the illustration of basic syntax for creating a table:
CREATE TABLE [IF NOT EXISTS] table_name (
column1 datatype(length) column_contraint,
column2 datatype(length) column_contraint,
column3 datatype(length) column_contraint,
table_constraints
);
- In the above syntax, specify the name of the table after the keywords CREATE TABLE.
- It should be noted that this is for creating a new table if a table exists and you still apply the command it will result in an error.
- Then, specify a comma separated list of table columns. Where each column consists of the column name, the data type that the column stores, data length, and column of constraint.
- The column constraints specify the rules for column data to be followed
- Finally, you should specify the table constraints including primary key, foreign key, and check constraints.
Constraints
- NOT NULL:
- ensures that column value is not NULL
- UNIQUE:
- ensures that values across columns unique across the rows within the same table
- PRIMARY KEY:
- It identifies the rows in a table. This feature helps you to decide the primary key of the table as a table can only have one primary key
- CHECK:
- This ensures that data satisfies a boolean expression
- FOREIGN KEY:
- It ensures that value in a column from a table exists in a column in another table. A table can have multiple foreign keys
Table Creation Summary
- Use the CREATE TABLE statement to create a new table
- Use the IF NOT EXISTS option to create the new table only if it does not exist
- Apply the primary key, foreign key, not null, unique, and check constraints to columns of a table.
- Table constraints are similar to column constraints, except they apply to many columns instead of just one.
PostgreSQL Create Database and Table Tutorial Conclusion
We covered how to create databases and tables in PostgreSQL. PostgreSQL is one of the best tools for maintaining, generating and manipulating tables and databases on the market. The user interface is simple to use, convenient, and accessible. On the program’s official forums, there is a wealth of information and lessons. For the past 40 years, the software has been updated on a regular basis to assure quality and security.
Creating a database in PostgreSQL ensures that data is stored efficiently and securely for a variety of applications, including Web, mobile and analytical applications. As we’ve seen, a database may be established with a few basic instructions, which may take some experience. However, making a table is a far simpler operation. PostgreSQL should be your first choice for creating databases and tables since it is open-source, secure and community driven.