Установка PostgreSQL 11

Thank you for reading this post, don't forget to subscribe!

Реля­ци­он­ные базы дан­ных явля­ют­ся одним из основ­ных ком­по­нен­тов боль­шин­ства сай­тов и при­ло­же­ний. Они необ­хо­ди­мы для струк­ту­ри­ро­ва­ния и хра­не­ния данных.

PostgreSQL – это реля­ци­он­ная систе­ма управ­ле­ния база­ми дан­ных (СУБД), осно­ван­ная на язы­ке запро­сов SQL. Она под­хо­дит для под­держ­ки при­ло­же­ний любо­го мас­шта­ба и име­ет мно­же­ство допол­ни­тель­ных функ­ций (надёж­ные тран­зак­ции, парал­ле­лизм без бло­ки­ров­ки прав на чте­ние и мно­гое другое).

Дан­ный ману­ал помо­жет уста­но­вить PostgreSQL на вир­ту­аль­ный выде­лен­ный сер­вер CentOS 7 и научит рабо­тать с этой СУБД.

1: Установка PostgreSQL

Пакет PostgreSQL мож­но загру­зить из офи­ци­аль­но­го репо­зи­то­рия CentOS с помо­щью стан­дарт­но­го мене­дже­ра паке­тов. Одна­ко эта вер­сия может быть уста­рев­шей. Пото­му мы реко­мен­ду­ем уста­но­вить пакет из офи­ци­аль­но­го репо­зи­то­рия Postgres.

Преж­де чем перей­ти к настрой­ке ново­го репо­зи­то­рия, исклю­чи­те поиск паке­тов postgresql из репо­зи­то­рия CentOS-Base. В про­тив­ном слу­чае зави­си­мо­сти могут раз­ре­шить­ся на дру­гую вер­сию пакета.

Открой­те кон­фи­гу­ра­ци­он­ный файл репо­зи­то­рия с помо­щью тек­сто­во­го редак­то­ра, напри­мер, vim:

sudo vi /etc/yum.repos.d/CentOS-Base.repo

Най­ди­те раз­де­лы [base] и [updates], перей­ди­те в режим встав­ки, нажав i, и вставь­те стро­ку exclude=postgresql* в оба раз­де­ла. В резуль­та­те файл будет выгля­деть сле­ду­ю­щим образом:

...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
...

Когда вы закон­чи­те, нажми­те ESC, что­бы вый­ти из режи­ма встав­ки, затем :wq и Enter, что­бы сохра­нить и закрыть файл.

Теперь уста­но­ви­те пакет кон­фи­гу­ра­ции репо­зи­то­рия, исполь­зуй­те для это­го офи­ци­аль­ный репо­зи­то­рий PostgreSQL для CentOS:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Под­твер­ди­те уста­нов­ку, нажав у.

Репо­зи­то­рий PostgreSQL содер­жит инфор­ма­цию обо всех доступ­ных рели­зах PostgreSQL. Вы може­те уви­деть все доступ­ные паке­ты и вер­сии, вве­дя сле­ду­ю­щую команду:

yum list postgresql*

Выбе­ри­те и уста­но­ви­те нуж­ную вер­сию PostgreSQL. В этом мануа­ле мы исполь­зу­ем релиз PostgreSQL 11.

Что­бы уста­но­вить сер­вер PostgreSQL, исполь­зуй­те сле­ду­ю­щую команду:

sudo yum install postgresql11-server

В про­цес­се уста­нов­ки вам будет пред­ло­же­но импор­ти­ро­вать ключ GPG:

...
Importing GPG key 0x442DF0F8:
Userid     : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>"
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-5.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]:

Что­бы про­дол­жить уста­нов­ку, вве­ди­те у.

Уста­нов­ка PostgreSQL завер­ше­на. Теперь мож­но озна­ко­мить­ся с её функ­ци­я­ми и создать новый кластер.

2: Создание кластера PostgreSQL

Нам нуж­но создать новый кла­стер базы дан­ных PostgreSQL, преж­де чем начать исполь­зо­вать Postgres. Кла­стер баз дан­ных – это набор баз, кото­рые управ­ля­ют­ся одним экзем­пля­ром сер­ве­ра. Что­бы создать кла­стер, нуж­но создать ряд ката­ло­гов, в кото­рые будут поме­ще­ны дан­ные БД, создать таб­ли­цы и базы дан­ных template1 и postgres.

База дан­ных template1 необ­хо­ди­ма для созда­ния новой БД. Все, что хра­нит­ся в ней, будет поме­ще­но в новую базу дан­ных при ее созда­нии. postgres – это база дан­ных по умол­ча­нию, пред­на­зна­чен­ная для рабо­ты с поль­зо­ва­те­ля­ми, ути­ли­та­ми и сто­рон­ни­ми приложениями.

Создай­те новый кла­стер PostgreSQL с помо­щью initdb:

sudo /usr/pgsql-11/bin/postgresql-11-setup initdb

Вы уви­ди­те сле­ду­ю­щий вывод:

Initializing database ... OK

Теперь запу­сти­те и вклю­чи­те сер­вис PostgreSQL с помо­щью systemctl:

sudo systemctl start postgresql-11
sudo systemctl enable postgresql-11

Вы уви­ди­те такой вывод:

Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.

PostgreSQL запу­щен и рабо­та­ет. Теперь давай­те посмот­рим, как рабо­та­ет Postgres и чем эта СУБД отли­ча­ет­ся от ана­ло­гич­ных систем, кото­рые вы, воз­мож­но, исполь­зо­ва­ли ранее.

3: Роли и базы данных PostgreSQL

По умол­ча­нию PostgreSQL исполь­зу­ет так назы­ва­е­мые роли. Они чем-то похо­жи на учёт­ные запи­си поль­зо­ва­те­лей или груп­пы Unix-подоб­ных систем. Толь­ко PostgreSQL не раз­ли­ча­ет поль­зо­ва­те­лей и груп­пы, она объ­еди­ня­ет их под поня­ти­ем «роли».

Во вре­мя уста­нов­ки PostgreSQL исполь­зу­ет модель аутен­ти­фи­ка­ции ident, кото­рая свя­зы­ва­ет роли PostgreSQL со стан­дарт­ны­ми поль­зо­ва­те­ля­ми Unix/Linux. Открыть суще­ству­ю­щую роль мож­но при помо­щи свя­зан­ной с ней учёт­ной запи­си Linux.

Во вре­мя уста­нов­ки был создан Linux-поль­зо­ва­тель postgres, кото­рый свя­зан со стан­дарт­ной ролью систе­мы. Мож­но исполь­зо­вать этот акка­унт, что­бы под­клю­чить­ся к Postgres.

Суще­ству­ет несколь­ко спо­со­бов полу­чить доступ к PostgreSQL при помо­щи это­го аккаунта.

Поль­зо­ва­тель postgres

Что­бы перей­ти в сес­сию поль­зо­ва­те­ля postgres, введите:

sudo -i -u postgres

Что­бы полу­чить доступ к команд­ной стро­ке, введите:

psql

Коман­да выпол­нит вход и откро­ет доступ к управ­ле­нию СУБД.

Что­бы закрыть команд­ную стро­ку PostgreSQL, наберите:

\q

Это вер­нёт команд­ную стро­ку Linux. Что­бы вер­нуть­ся в сес­сию обыч­но­го поль­зо­ва­те­ля sudo, введите:

exit

Пря­мой доступ к команд­ной стро­ке PostgreSQL

Мож­но так­же полу­чить доступ к команд­ной стро­ке PostgreSQL, не изме­няя при этом сес­сии поль­зо­ва­те­ля. Для это­го нужен доступ к коман­де sudo.

В послед­нем при­ме­ре вам было пред­ло­же­но перей­ти к команд­ной стро­ке Postgres, сна­ча­ла пере­клю­чив­шись на поль­зо­ва­те­ля postgres, а затем запу­стив psql. Что­бы полу­чить доступ к команд­ной стро­ке Postgres за один шаг, запу­сти­те коман­ду psql как поль­зо­ва­тель postgres с пра­ва­ми sudo:

sudo -u postgres psql

Эта коман­да выпол­нит авто­ма­ти­че­ский вход в PostgreSQL без про­ме­жу­точ­ной обо­лоч­ки bash.

Что­бы закрыть эту команд­ную стро­ку, введите:

\q

4: Создание роли

На дан­ный момент в СУБД есть толь­ко одна роль, postgres. Что­бы создать новую роль, исполь­зуй­те коман­ду createrole. Что­бы создать роль в интер­ак­тив­ном режи­ме, добавь­те флаг —interactive.

В сес­сии поль­зо­ва­те­ля postgres создать ново­го поль­зо­ва­те­ля мож­но с помо­щью команды:

createuser --interactive

В сес­сии дру­го­го поль­зо­ва­те­ля мож­но исполь­зо­вать коман­ду sudo, что­бы не пере­хо­дить в сес­сию postgres:

sudo -u postgres createuser --interactive

Скрипт запро­сит дан­ные о поль­зо­ва­те­ле. Затем в зави­си­мо­сти от полу­чен­ных дан­ных он выпол­нит все необ­хо­ди­мые коман­ды, что­бы создать отве­ча­ю­ще­го тре­бо­ва­ни­ям пользователя.

Enter name of role to add: mid
Shall the new role be a superuser? (y/n) y

У это­го скрип­та есть мно­го раз­лич­ных фла­гов. Озна­ко­мить­ся со спис­ком доступ­ных опций мож­но на стра­ни­це мануала:

man createuser

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

По умол­ча­нию роль Postgres запра­ши­ва­ет одно­имен­ную базу дан­ных. Пото­му сле­ду­ет создать такую БД для ново­го пользователя.

Толь­ко что вы созда­ли ново­го поль­зо­ва­те­ля (в руко­вод­стве он услов­но назы­ва­ет­ся mid). Для созда­ния БД исполь­зу­ет­ся коман­да createdb.

В сес­сии поль­зо­ва­те­ля postgres создать новую БД мож­но с помо­щью команды:

createdb mid

В сес­сии дру­го­го поль­зо­ва­те­ля мож­но исполь­зо­вать коман­ду sudo, что­бы не пере­хо­дить в сес­сию postgres:

sudo -u postgres createdb mid

6: Аутентификация новой роли PostgreSQL

Что­бы выпол­нить ident аутен­ти­фи­ка­цию PostgreSQL, нуж­но иметь поль­зо­ва­те­ля систе­мы Linux, чье имя сов­па­да­ет с име­нем роли и БД.

Если у вас нет тако­го поль­зо­ва­те­ля, создай­те его в Linux с помо­щью коман­ды adduser (для это­го необ­хо­ди­мы пра­ва sudo).

sudo adduser mid

После это­го мож­но перей­ти в сес­сию ново­го поль­зо­ва­те­ля и под­клю­чить­ся к БД:

sudo -i -u mid
psql

Или же под­клю­чить­ся к БД напрямую:

sudo -u mid psql

Если все преды­ду­щие настрой­ки были выпол­не­ны пра­виль­но, коман­да авто­ма­ти­че­ски под­клю­чит­ся к БД.

Что­бы под­клю­чить­ся к дру­гой БД, нуж­но ука­зать её имя:

psql -d postgres

Что­бы полу­чить инфор­ма­цию о теку­щем под­клю­че­нии, введите:

\conninfo
You are connected to database "mid" as user "mid" via socket in "/var/run/postgresql" at port "5432".

Это может быть полез­но при под­клю­че­нии к нестан­дарт­ным базам дан­ных или пользователям.

7: Создание и удаление таблиц

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

Попро­буй­те создать таб­ли­цу для хра­не­ния дан­ных; для при­ме­ра таб­ли­ца может опи­сы­вать обо­ру­до­ва­ние дет­ской пло­щад­ки. Син­так­сис этой коман­ды выгля­дит так:

CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);

Как види­те, для таб­ли­цы нуж­но выбрать имя, опре­де­лить столб­цы, тип столб­цов и мак­си­маль­ную дли­ну поля. Опци­о­наль­но мож­но так­же уста­но­вить огра­ни­че­ния для каж­до­го столбца.

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

CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
install_date date
);

Дан­ная таб­ли­ца опи­сы­ва­ет всё обо­ру­до­ва­ние. Таб­ли­ца начи­на­ет­ся со столб­ца ID, кото­рый ука­зы­ва­ет поряд­ко­вый номер запи­си. Этот стол­бец был огра­ни­чен по PRIMARY KEY, что зна­чит, что зна­че­ния долж­ны быть уни­каль­ны­ми и не долж­ны быть нулём.

Дли­на поля столб­цов equip_id и install_date не огра­ни­че­на; дело в том, что зада­вать дли­ну неко­то­рых столб­цов необя­за­тель­но, так как она авто­ма­ти­че­ски зада­ёт­ся типом данных.

Столб­цы type и color не могут быть пусты­ми. Стол­бец location огра­ни­чен восе­мью воз­мож­ны­ми зна­че­ни­я­ми. Стол­бец date ука­зы­ва­ет дату уста­нов­ки оборудования.

Про­смот­реть таб­ли­цу мож­но при помо­щи команды:

\d
List of relations
Schema |          Name           |   Type   | Owner
-------+-------------------------+----------+-------
public | playground              | table    | mid
public | playground_equip_id_seq | sequence | mid
(2 rows)

playground_equip_id_seq име­ет тип дан­ных sequence. Это пред­став­ле­ние типа дан­ных serial, уста­нов­лен­но­го для столб­ца equip_id. Этот тип опре­де­ля­ет сле­ду­ю­щий номер в последовательности.

Что­бы про­смот­реть таб­ли­цу вне это­го типа дан­ных, введите:

\dt
List of relations
Schema |    Name    | Type  | Owner
--------+------------+-------+-------
public | playground | table | mid
(1 row)

 

7.1 Управление Таблицами 

Синтаксис таблиц PostgreSQL

Новая БД ещё не содер­жит таб­лиц. В этом мож­но убе­дить­ся, запро­сив спи­сок доступ­ных таблиц:

\d
No relations found.

Что­бы создать новую таб­ли­цу, при­дер­жи­вай­тесь сле­ду­ю­ще­го синтаксиса:

CREATE TABLE new_table_name (
table_column_title TYPE_OF_DATA column_constraints,
next_column_title TYPE_OF_DATA column_constraints,
table_constraint
table_constraint
) INHERITS existing_table_to_inherit_from;

Часть от закры­той скоб­ки и до запя­той – это допол­ни­тель­ная кон­струк­ция, поз­во­ля­ю­щая насле­до­вать все столб­цы суще­ству­ю­щей таб­ли­цы в допол­не­ние к столб­цам, пере­чис­лен­ным в команде.

Часть син­так­си­са, взя­тая в скоб­ки, делит­ся на две части: опре­де­ле­ния столб­цов и огра­ни­че­ния таблиц.

Определения столбцов PostgreSQL

Опре­де­ле­ние столб­цов осу­ществ­ля­ет­ся соглас­но шаблону:

column_name data_type (optional_data_length_restriction) column_constraints

При­ме­ча­ние: Имя столб­ца долж­но быть описательным.

Типы данных PostgreSQL

  • boolean: (или bool) объ­яв­ля­ет зна­че­ния true и false.

Символьные значения

  • char: хра­нит один символ
  • char (#): содер­жит # коли­че­ство сим­во­лов; сво­бод­ные места будут запол­не­ны пробелами.
  • varchar (#): хра­нит дан­ные пере­мен­ной дли­ны (не в Юни­ко­де); пара­метр # опре­де­ля­ет дли­ну строки.

Целые значения

  • smallint: целое чис­ло меж­ду -32768 и 32767.
  • int: целое чис­ло меж­ду -214783648 и 214783647.
  • serial: целое чис­ло с автоувеличением.

Числа с плавающей точкой

  • float (#): чис­ло с пла­ва­ю­щей точ­кой, где # — коли­че­ство битов.
  • real: 8-бит­ное чис­ло с пла­ва­ю­щей точкой.
  • numeric (#,after_dec): чис­ло с # коли­че­ством цифр, где after_dec – коли­че­ство цифр после деся­тич­но­го знака

Дата и время

  • date: дата
  • time: вре­мя
  • timestamp: дата и время
  • timestamptz: дата, вре­мя и часо­вой пояс
  • interval: раз­ни­ца меж­ду дву­мя зна­че­ни­я­ми timestamp

Геометрические типы

  • point: хра­нит пару коор­ди­нат опре­де­лён­ной точки.
  • line: набор точек, опре­де­ля­ю­щих линию.
  • lseg: набор дан­ных, опре­де­ля­ю­щий сег­мент линии.
  • box: набор дан­ных, кото­рый опре­де­ля­ет прямоугольник.
  • polygon: набор дан­ных, опре­де­ля­ю­щий любое закры­тое пространство

Сетевые адреса

  • inet: IP-адрес
  • macaddr: MAC адреса.

Ограничения столбцов и таблиц PostreSQL

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

  • NOT NULL: стол­бец не может иметь зна­че­ние 0.
  • UNIQUE: зна­че­ние столб­ца долж­но быть раз­ным для каж­дой запи­си. Нуль все­гда счи­та­ет­ся уни­каль­ным значением.
  • PRIMARY KEY: ком­би­ни­ру­ет пер­вые два огра­ни­че­ния. Мож­но исполь­зо­вать толь­ко раз на всю таблицу.
  • CHECK: про­ве­ря­ет, истин­но ли усло­вие для зна­че­ний в столбце.
  • REFERENCES: зна­че­ние долж­но суще­ство­вать в столб­це в дру­гой таблице.

После опре­де­ле­ния огра­ни­че­ний столб­цов мож­но объ­явить огра­ни­че­ния для всей таб­ли­цы. Сре­ди них UNIQUE, PRIMARY KEY, CHECK и REFERENCES.

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

Попро­буй­те создать тесто­вую таб­ли­цу. Для при­ме­ра назо­вём её pg_equipment и поме­стим в неё дан­ные о раз­лич­ном обо­ру­до­ва­нии для дет­ских пло­ща­док. Вве­ди­те сле­ду­ю­щее опре­де­ле­ние таблицы:

CREATE TABLE pg_equipment (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
install_date date
);
NOTICE:  CREATE TABLE will create implicit sequence "pg_equipment_equip_id_seq" for serial column "pg_equipment.equip_id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "pg_equipment_pkey" for table "pg_equipment"
CREATE TABLE

Что­бы про­смот­реть таб­ли­цу, вве­ди­те в команд­ную стро­ку \d.

\d
List of relations
Schema |           Name            |   Type   |     Owner
--------+---------------------------+----------+---------------
public | pg_equipment              | table    | postgres_user
public | pg_equipment_equip_id_seq | sequence | postgres_user
(2 rows)

Эта коман­да выве­дет на экран таб­ли­цу и создаст после­до­ва­тель­ность соглас­но типу дан­ных serial.

Изменение таблиц в PostgreSQL

Теперь попро­буй­те вне­сти в таб­ли­цу изме­не­ния. Для это­го исполь­зу­ет­ся сле­ду­ю­щий синтаксис:

ALTER TABLE table_name Action_TO_Take;

К при­ме­ру, мож­но доба­вить в таб­ли­цу pg_equipment новый столбец.

ALTER TABLE pg_equipment ADD COLUMN functioning bool;
ALTER TABLE

Что­бы про­смот­реть новый стол­бец, введите:

\d pg_equipment
Column    |         Type          |                            Modifiers
--------------+-----------------------+-----------------------------------------------------------------
equip_id     | integer               | not null default nextval('pg_equipment_equip_id_seq'::regclass)
type         | character varying(50) | not null
color        | character varying(25) | not null
location     | character varying(25) |
install_date | date                  |
functioning  | boolean               |
. . .

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

ALTER TABLE pg_equipment ALTER COLUMN functioning SET DEFAULT 'true';

Что­бы ука­зать так­же, что зна­че­ние не может быть нулём, используйте:

ALTER TABLE pg_equipment ALTER COLUMN functioning SET NOT NULL;

Что­бы пере­име­но­вать стол­бец, введите:

ALTER TABLE pg_equipment RENAME COLUMN functioning TO working_order;

Уда­лить стол­бец мож­но с помо­щью команды:

ALTER TABLE pg_equipment DROP COLUMN working_order;

Что­бы пере­име­но­вать всю таб­ли­цу, введите:

ALTER TABLE pg_equipment RENAME TO playground_equip;

Удаление таблиц PostgreSQL

Что­бы уда­лить таб­ли­цу PostgreSQL, введите:

DROP TABLE playground_equip;
DROP TABLE

Если при­ме­нить эту коман­ду к таб­ли­це, кото­рой не суще­ству­ет, появит­ся сле­ду­ю­щее сооб­ще­ние об ошибке:

ERROR: table "playground_equip" does not exist

Что­бы избе­жать этой ошиб­ки, мож­но доба­вить в коман­ду IF EXISTS; тогда таб­ли­ца будет уда­ле­на, если она суще­ству­ет. В любом слу­чае коман­да будет выпол­не­на успешно.

DROP TABLE IF EXISTS playground_equip;
NOTICE:  table "playground_equip" does not exist, skipping
DROP TABLE

В этот раз коман­да сооб­ща­ет, что задан­ная таб­ли­ца не най­де­на, но не воз­вра­ща­ет ошибки.

8: Добавление, запрос и удаление данных

Теперь попро­буй­те доба­вить в таб­ли­цу данные.

Для это­го нуж­но вызвать целе­вую таб­ли­цу, назвать столб­цы и вве­сти дан­ные, кото­рые нуж­но доба­вить. К при­ме­ру, что­бы доба­вить гор­ку (slide) и каче­ли (swing), нуж­но ввести:

INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

Добав­ляя дан­ные в таб­ли­цу, помните:

  • Имя таб­ли­цы не нуж­но брать в кавычки.
  • Зна­че­ния столб­цов необ­хо­ди­мо взять в кавычки.
  • В стол­бец equip_id не нуж­но добав­лять дан­ные; его зна­че­ния гене­ри­ру­ют­ся автоматически.

Про­смот­ри­те добав­лен­ные данные:

SELECT * FROM playground;
equip_id | type  | color  | location  | install_date
---------+-------+--------+-----------+--------------
1 | slide | blue   | south     | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)

Как види­те, стол­бец equip_id был запол­нен авто­ма­ти­че­ски. Что­бы уда­лить зна­че­ние (к при­ме­ру, slide), исполь­зуй­те команду:

DELETE FROM playground WHERE type = 'slide';

Про­верь­те таблицу:

SELECT * FROM playground;
equip_id | type  | color  | location  | install_date
---------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)

9: Добавление и удаление столбцов

PostgreSQL поз­во­ля­ет изме­нять коли­че­ство столб­цов таб­ли­цы после её создания.

Что­бы доба­вить стол­бец, исполь­зуй­те команду:

ALTER TABLE playground ADD last_maint date;

Про­смот­ри­те таб­ли­цу, и вы уви­ди­те новый стол­бец (пока что он пуст):

SELECT * FROM playground;
equip_id | type  | color  | location  | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16   |
(1 row)

Что­бы уда­лить стол­бец, введите:

ALTER TABLE playground DROP last_maint;

Это уда­ля­ет стол­бец last_maint и все най­ден­ные в нем зна­че­ния, но остав­ля­ет все дру­гие дан­ные без изменений.

10: Обновление данных в таблице

Запи­си в таб­ли­це мож­но редактировать.

Что­бы обно­вить зна­че­ние суще­ству­ю­щей запи­си, нуж­но запро­сить эту запись и ука­зать стол­бец, зна­че­ние кото­ро­го нуж­но изме­нить. Для при­ме­ра попро­буй­те обно­вить зна­че­ние запи­си swing; заме­ни­те yellow в столб­це color новым зна­че­ни­ем (напри­мер, red).

UPDATE playground SET color = 'red' WHERE type = 'swing';

Про­смот­ри­те таб­ли­цу, что­бы убе­дить­ся, что дан­ные были обновлены:

SELECT * FROM playground;
equip_id | type  | color | location  | install_date
----------+-------+-------+-----------+--------------
2 | swing | red   | northwest | 2018-08-16
(1 row)

Как види­те, зна­че­ние было успеш­но обновлено.