PostgreSQL является базой данных с открытым исходным кодом на уровне предприятий.
Это одна из самых надежных, защищенных, многофункциональных и мощных реляционных баз данной системы.
Самое главное, что PostgreSQL хорошо известна своей способностью обрабатывать тяжелую нагрузку, и обеспечивают высокую производительность. Это поддерживает почти все функции, которые вы когда-нибудь потребуется от системы РСУБД.
Если вы новичок в PostgreSQL, этот учебник даст вам отличный рывок.
Рассматриваются в данном руководстве следующим образом:
Есть два способа, с помощью которых можно установить базу данных PostgreSQL:
Для того, чтобы установить его с помощью yum, используйте следующую команду:
yum install postgresql-server
Для того, чтобы установить его из исходного кода, выполните следующие действия: 9 шагов по установке и настройке PostgreSQL из исходных кодов на Linux.
Далее, вы должны инициализировать базу данных 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 будет делать следующее:
Для того, чтобы создать новую базу данных 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
После того, как вы создали новую базу данных, то настало время, чтобы создать новую таблицу в соответствии с этой базой данных.
Во-первых, вы должны подключиться к вновь созданной базе данных “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=#
Несколько вещей, которые нужно иметь в виду:
Ниже приведены некоторые другие данные, которые поддерживается базой данных PostgreSQL:
После того, как мы выполнили команду создания таблицы, мы должны проверить, чтобы убедиться, что таблица создана успешно.
Для этого используйте опцию \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 байт“, так как мы еще не вставили новые записи.
Если вы использовали другую базу данных, как 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 | |
Следующий шаг должен вставить некоторые записи сотрудников в таблицу сотрудников.
Синтаксис точно такое же, как и любой стандартный синтаксис 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”, как показано выше.
Так же, как и любая команда 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 в качестве идентификатора.