PostgreSQL является базой данных с открытым исходным кодом на уровне предприятий.
Это одна из самых надежных, защищенных, многофункциональных и мощных реляционных баз данной системы.
Самое главное, что PostgreSQL хорошо известна своей способностью обрабатывать тяжелую нагрузку, и обеспечивают высокую производительность. Это поддерживает почти все функции, которые вы когда-нибудь потребуется от системы РСУБД.
Если вы новичок в PostgreSQL, этот учебник даст вам отличный рывок.
Рассматриваются в данном руководстве следующим образом:
- Как установить PostgreSQL
- Инициализировать БД с помощью initdb
- Создание новой базы данных Postgres
- Создание новой таблицы
- Все объекты (включая таблицы)
- Обзор деталей таблицы (Описание таблиц PostgreSQL)
- Вставка записи в таблицу
- Просмотр записей таблицы (выборка из таблицы)
1. Установка PostgreSQL
Есть два способа, с помощью которых можно установить базу данных PostgreSQL:
- Установка из yum repository
- Установка из исходного кода
Для того, чтобы установить его с помощью yum, используйте следующую команду:
yum install postgresql-server
Для того, чтобы установить его из исходного кода, выполните следующие действия: 9 шагов по установке и настройке PostgreSQL из исходных кодов на Linux.
2. Инициализировать базу данных с помощью initdb
Далее, вы должны инициализировать базу данных PostgreSQL с помощью initdb и запустить сервер PostgreSQL.
Если вы находитесь на CentOS 6 (или RedHat), используйте следующее:
service postgresql initdb service postgresql start
Если вы находитесь на CentOS 7 (или RHEL 7), Fedora 23+ выполните следующие действия:
postgresql-setup initdb systemctl start postgresql.service
При инициализации базы данных с помощью команды itdb, это создаст новый кластер PostgreSQL db. Кластер в этом контексте не что иное, как куча баз данных PostgreSQL, управляемых на одном узле одним сервером PostgreSQL.
Initdb будет делать следующее:
- Создать соответствующие каталоги, необходимые для файлов базы данных
- Создание каталога таблиц, которые являются своего рода системными таблицами, которые будут использоваться совместно со всеми базами данных на кластере
- Это также позволит создать базу данных template1, которая будет выступать в качестве основы для всех новых баз данных, которые будут созданы на данном кластере Postgres
3. Создайте новую базу данных Postgres
Для того, чтобы создать новую базу данных Postgres, используйте команду createdb, как показано ниже.
Ниже команда создаст новую пользовательскую базу данных PostgreSQL под названием “andreyex”.
# createdb andreyex
Если команда createdb нет в вашей системе, или что-то пошло не так во время установки. Вы могли бы быть иметь в своей среде PATH.
При установке с помощью yum, эта команда будет в /usr/pgsql-X.Y/bin/createdb (где, XY это номер версии), с соответствующей ссылкой на /usr/bin. Таким образом, вы не будете иметь проблему здесь.
Но, если вы установили из исходных текстов, то вы можете убедиться, что каталог /usr/local/pgsql/bin/ находиться в вашей переменной PATH.
Кроме того, убедитесь, что вы создаете базу данных от пользователя, обладающего правами на создание базы данных. Если вы новичок в понятиях пользователей/роли в PostgreSQL, на данный момент, идти вперед и войдите в систему с правами администратора (при условии, что вы установили POSTGRESQL как root), и выполните команду createdb оттуда.
В следующем примере, мы создадим базу данных из Linux пользователя под названием “Maxim”, который не имеет соответствующего привилегию, чтобы создать новую базу данных.
$ createdb andreyex createdb: could not connect to database template1: FATAL: role "Maxim" does not exist
И, наконец, когда вы создаете новую базу данных, и если ваш сервер PostgreSQL не запущен, то вы получите следующее сообщение об ошибке “could not connect to database template1”.
# createdb andreyex createdb: could not connect to database template1: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Примечание: Если вы создали базу данных по ошибке, вы можете удалить базу данных с помощью команды “dropdb”, как показано ниже.
# dropdb andreyex
4. Создание новой таблицы
После того, как вы создали новую базу данных, то настало время, чтобы создать новую таблицу в соответствии с этой базой данных.
Во-первых, вы должны подключиться к вновь созданной базе данных “andreyex”, используя команду psql, как показано ниже.
$ psql andreyex psql (9.6.1) Type "help" for help. andreyex=#
Для этого примера, давайте создадим таблицу сотрудников со следующими 4 колонками:
CREATE TABLE employee ( id SERIAL, --emp id; auto-increment when empty name varchar(20), --emp name dept varchar(10), --department salary int --employee's salary );
При выполнении указанной выше команды в строке POSTGRESQL, вы увидите следующее. Если таблица успешно создана, она будет отображать “CREATE TABLE” в качестве сообщения, как показано ниже.
andreyex=# CREATE TABLE employee ( andreyex(# id SERIAL, --emp id; auto-increment when empty andreyex(# name varchar(20), --emp name andreyex(# dept varchar(10), --department andreyex(# salary int --employee's salary andreyex(# ); CREATE TABLE andreyex=#
Несколько вещей, которые нужно иметь в виду:
- Двойное тире (- а затем что-то -) означает запись комментария. Все, что следует за двойное тире является комментарием, как вы видите из приведенной выше команды.
- Varchar для строковых полей, указать максимальную длину поля строки внутри скобок. Так, VARCHAR (20) для поля имени указывает, что имя сотрудника может быть не более 20 символов.
- int поле для чисел
- SERIAL тип данных указывается для удостоверения личности. Мы могли бы также указать здесь Int. Но SERIAL делает то, когда вы не указываете идентификатор сотрудника во время вашей команды вставки, она будет создавать один и автоматически увеличивать его соответствующим образом из автоматического созданных последовательности.
Ниже приведены некоторые другие данные, которые поддерживается базой данных PostgreSQL:
- char(X)
- int
- smallint
- real
- double precision
- date
- time
- timestamp
- interval
- и т.п.
5. Просмотреть все объекты (включая таблицы)
После того, как мы выполнили команду создания таблицы, мы должны проверить, чтобы убедиться, что таблица создана успешно.
Для этого используйте опцию \d, как показано ниже.
“d” в этом контексте является дисплей. Это будет список доступных всех таблиц, представлений и последовательностей.
Как видно из следующего вывода, мы видим вновь созданную таблицу сотрудников.
andreyex-# \d List of relations Schema | Name | Type | Owner --------+-----------------+----------+---------- public | employee | table | postgres public | employee_id_seq | sequence | postgres (2 rows)
Помимо таблицы сотрудников, мы также видим последовательность, которую мы не создавали. Это происходит потому, что мы определили, как тип данных SERIAL для идентификатора поля Postgres автоматически создал эту employee_id_seq, что он будет в свою очередь, использовать его, когда вы не укажете значение во время вставки в поле номер сотрудника.
Кроме того, используйте команду “\d+“, которая будет отображать несколько дополнительных столбцов об объектах; размер и описание, как показано ниже.
andreyex-# \d+ List of relations Schema | Name | Type | Owner | Size | Description --------+-----------------+----------+----------+------------+------------- public | employee | table | postgres | 0 bytes | public | employee_id_seq | sequence | postgres | 8192 bytes | (2 rows)
Размер нашей таблицы сотрудников составляет “0 байт“, так как мы еще не вставили новые записи.
6. Просмотр деталей таблицы (Описание таблицы PostgreSQL)
Если вы использовали другую базу данных, как Oracle или MySQL, и т.д., вы знакомы с командой “desc”, которая будет отображать все подробности о таблицах, включая колонки и ее типы данных.
В PostgreSQL эквивалент команды “desc” является “\d“, а затем имя таблицы.
“d” в этом контексте является “описание”.
Как вы видите ниже, это описывает детали таблицы сотрудников.
andreyex-# \d employee Table "public.employee" Column | Type | Modifiers --------+-----------------------+------------------------------------------------------- id | integer | not null default nextval('employee_id_seq'::regclass) name | character varying(20) | dept | character varying(10) | salary | integer |
При использовании “\d+“, как показано ниже, это будет отображать дополнительную информацию о столбцах таблицы; хранилище, статистика цель и описание.
andreyex-# \d+ employee Table "public.employee" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-------------------------------------------------------+----------+--------------+------------- id | integer | not null default nextval('employee_id_seq'::regclass) | plain | | name | character varying(20) | | extended | | dept | character varying(10) | | extended | | salary | integer | | plain | |
7. Вставка записи в таблицу
Следующий шаг должен вставить некоторые записи сотрудников в таблицу сотрудников.
Синтаксис точно такое же, как и любой стандартный синтаксис SQL вставки.
Далее будет вставить 5 записей в таблицу сотрудников с заданными значениями для всех полей.
INSERT INTO employee VALUES (100,'Thomas','Sales',5500); INSERT INTO employee VALUES (200,'Maxim','Technology',5600); INSERT INTO employee VALUES (300,'Artem','Technology',7600); INSERT INTO employee VALUES (400,'Andrey','Marketing',9200); INSERT INTO employee VALUES (500,'Vasil','Technology',6100);
Порядок значений должен соответствовать порядку имен столбцов, которые вы видите в выводе команды “\d employee”, то есть в том же порядке, как вы создали таблицу.
В следующем примере, мы можем вставить значения только в определенных столбцах таблицы сотрудников, указав имя столбца в скобках, как показано ниже.
В следующем примере мы вставим новую запись сотрудника только со значениями имен и столбцов.
andreyex=# INSERT INTO employee (name,dept) VALUES ('Oleg', 'Accounting'); INSERT 0 1
Если команда вставки выполнена успешно, то появится сообщение “INSERT 0 1”, как показано выше.
8. Просмотр записей таблицы (выборка из таблицы)
Так же, как и любая команда SELECT в sql, серверу позволяют только просматривать конкретные столбцы таблицы, указав имена столбцов, как показано ниже.
andreyex=# SELECT name, dept FROM employee; name | dept --------+------------ Thomas | Sales Maxim | Technology Artem | Technology Andrey | Marketing Vasil | Technology Oleg | Accounting (6 rows)
SELECT * будет отображать все столбцы из указанной таблицы, как показано ниже.
andreyex=# SELECT * FROM employee; id | name | dept | salary -----+--------+------------+-------- 100 | Thomas | Sales | 5000 200 | Maxim | Technology | 5500 300 | Artem | Technology | 7000 400 | Andrey | Marketing | 9500 500 | Vasil | Technology | 6000 1 | Oleg | Accounting | (6 rows)
В приведенном выше выводе значение столбца id на 6-й записи равна 1.
Это происходит потому, что там не указано значение идентификатора, и она автоматически приняла значение 1, из своей собственной последовательности. В следующий раз, вы создаете запись со значением идентификатора, он будет использовать 2 в качестве идентификатора.