Основные команды psql и sql Postgresql
Развертывание тестовой базы данных
sudo -u postgres psql -f demo_small_YYYYMMDD.sql
psql -f demo_small_YYYYMMDD.sql -U postgres
Подключение к развернутой базе данных demo:
sudo -u postgres psql -d demo
psql -d demo -U postgres
Создание таблицы:
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# create table aircrafts
(aircraft_code char(3) NOT NULL,
model text NOT NULL,
range integer NOT NULL,
CHECK ( range > 0 ),
PRIMARY KEY ( aircraft_code )
);
CREATE TABLE
testdb=#
Здесь:
char(3) - это символьный тип, ограниченный 3 символами
NOT NULL - не должен быть пустым
CHECK - проверка или ограничение
CHECK ( range > 0 ) - значение атрибута range не может быть меньше 0
PRIMARY KEY (aircraft_code) - в качестве первичног ключа был выбран атрибут aircraft_code
Естественный первичный ключ - ключ, который используется на практике
Чтобы завершить ввод и выполнить команду, необходимо в конце посавить точку с запятой(;) или символ \g
В случае, если запрос не выполнился, его можно снова открыть при помощи символа \e и выбора редактора
Чтобы просмотреть созданную таблицу в удобном виде:
# \d aircrafts
Table "public.aircrafts"
Column | Type | Collation | Nullable | Default
---------------+--------------+-----------+----------+---------
aircraft_code | character(3) | | not null |
model | text | | not null |
range | integer | | not null |
Indexes:
"aircrafts_pkey" PRIMARY KEY, btree (aircraft_code)
Check constraints:
"aircrafts_range_check" CHECK (range > 0)
Здесь public.aircrafts это имя схемы и название таблицы, схема public - это схема по умолчанию
В описании таблицы присутствуют названия индекса.
Индекс - это специальная структура данных предназначеная для ускорения доступа к строкам таблицы и предотвращения дублирования значений ключевых абтрибутов в различных строках таблицы.
Для первичного ключа автоматически создается индекс, в выводе он обозначается как имя таблицы: aircrafts + постфикс _pkey, btree - это тип индекса и в скобках ключевой атрибут таблицы: aircraft_code
Еще ниже указываются ограничения на атрибуты таблицы, название которого было сгенерировано автоматически путем прибавления префикса и постфикса.
INSERT
INSERT INTO aircrafts ( aircraft_code, model, range )
VALUES ( '773', 'Boeing 777-300', 11100 ),
( '763', 'Boeing 767-300', 7900 ),
( '733', 'Boeing 737-300', 4200 ),
( '320', 'Airbus A320-200', 5700 ),
( '321', 'Airbus A321-200', 5600 ),
( '319', 'Airbus A319-100', 6700 ),
( 'CN1', 'Cessna 208 Caravan', 1200 ),
( 'CR2', 'Bombardier CRJ-200', 2700 );
SELECT
При выводе select можно менять порядок столбцов. В полученной таблице строки выравниваются по правому краю, числовые значения по левому
WHERE AND OR
В условии выбора можно использовать операторы >= <= AND OR
select * from aircrafts where range >= 4000;
update
update aircrafts set range = 3500 where aircraft_code = 'SU9' ;
При использовании update, в качестве значения можно подставлять выражение, например благодаря новым технологиям, дальность полета увеличилась. range = range * 2
DELETE FROM TABLE
delete from aircrafts where aircraft_code = 'CN1';
История выполненных команд
Чтобы сохранить историю команд в файл:
\s /home/toly/history_psql.txt
Группировка строк с помощью GROUP BY
Допустим необходимо вывести кол-во строк для определенной модели самолета:
demo=# select aircraft_code, count(*) from seats group by aircraft_code
;
aircraft_code | count
---------------+-------
CN1 | 12
320 | 140
CR2 | 50
773 | 402
763 | 222
319 | 116
733 | 130
SU9 | 97
321 | 170
(9 rows)
Сортировка строк с помощью ORDER BY DESC
SELECT aircraft_code, count( * ) FROM seats
GROUP BY aircraft_code
ORDER BY count;
Группировать можно, используя несколько значений для group by
Сортировать можно используя несколько значений для order by
Для сортировки по убыванию, добавить DESC:
ORDER BY range DESC
Посмотреть все существующие схемы
select schema_name
from information_schema.schemata;
Альтернативный вариант:
select nspname
from pg_catalog.pg_namespace;
Вывод всех таблиц схемы
\dt sdf.*
Источники
Связанные темы
Оптимизация запросов в Postgresql
Буферный кэш и журнал в Postgresql
Установка и настройка MS SQL Server 2008 на Windows Server 2008 r
Системный каталог в Postgresql
Табличные пространства в Postgresql
Определение данных в Postgresql
Изменение временной зоны в Postgresql
Методы формирования соединений наборов строк
Агрегирование и группировка в Postgresql
Основные понятия реляционной модели
Лексическая структура в Postgresql
Создание и управление кластером postgresql
Системные каталоги в Postgresql
Этапы запроса и получения результата в postgresql