Типы данных postgresql и SQL

Тема СУБД очень широкая.. и достаточно объемно описать ее очень сложно. В этой статье я напишу какие-то примерчики, шпаргалки, а для тех, кому тема интересна посоветую следующий курс:

SQL - декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных.

Изначально SQL был основным способом работы пользователя с базой данных и позволял выполнять следующий набор операций:

  • создание в базе данных новой таблицы.
  • добавление в таблицу новых записей.
  • изменение записей.
  • удаление записей.
  • выборка записей из одной или нескольких таблиц (в соответствии с заданным условием).
  • изменение структур таблиц.

Типы данных Postgresql

Опишу только некоторые типы которые нам понадобятся:

Числовые типы

typelengthdescription
smalint2 bytesПозволяет хранить числа длиной в 2 байта
integet4 bytes4-байтовое число
biging8 bytes8-байтовое число
decimal*Специальный тип позволяющий хранить числа с некоторой точностью(кол-во знаков после запятой)
real4 bytesТип для хранения вещественных чисел с некоторой точностью
serial4 bytesПочти тот же самый integer(int) но значение в этом поле будет автоматически инкрементироваться для каждой записи

Некоторые примеры:

-- INT
SELECT 1.3::INT; -- 1
-- REAL
SELECT 0.3::REAL; -- 0.3
-- DECIMAL 👇 - кол-во цифр
-- | 👇 - кол-во знаков после запятой
SELECT 5.1234::DECIMAL(10, 5); -- 5.12340

Cимвольные типы

typelengthdescription
varchar(n)*Строки произвольной длины с максимумом n
char(n)*Cтроки длины n, пустые символы дозаполняются пробелами
text*Строки произвольной длины

Некоторые примеры:

SELECT 'some string'::CHAR(10); -- 'some strin'
SELECT 'some'::CHAR(10); -- 'some '

Типы даты и времени

typelengthdescription
timestamp8 bytesДата с временем
date4 bytesДата без времени
time8 bytesВремя без даты
interval16 bytesВременной интервал

Некоторые примеры

#date - date = число дней (integer)
SELECT '2012-01-05'::date - '2012-01-01'::date AS result;
result
----------
4
#today - возвращает текущую дату
SELECT 'today'::timestamp, now()::date;
timestamp | now
---------------------+-----------
2013-07-21 00:00:00 | 2013-07-21
#Интервалы можно складывать и вычитать между собой, делить и умножать на произвольные вещественные числа.
SELECT '1 hour'::interval / 7 AS result;
result
-----------------
00:08:34.285714

В типах timestamp и time можно указывать с часовым поясом или нет. По умолчанию идет без часового пояса. Что бы время или дату и время с часовым поясом нужно использовать timestamp with time zone(time with time zone) или же использовать специальное расширение timestamptz (timetz).

Бинарные данные

TODO: Продолжить

SQL комманды

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

Под управлением одной СУБД у нас может находиться несколько баз данных. Для создания базы данные в PostgreSQL используется следующая команда:

CREATE DATABASE <database_name>;

PSQL

Если вы находитесь в REPL-клиенте psql для подключения к базе данных следует набрать команду: \c <database_name>

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

Таблицы создаются с помощью команды CREATE TABLE. В примере ниже показано как выглядит полная команда, в круглых скобочках перечисляются колонки(columns) в таблице или ограничения(constraints)

CREATE TABLE <table_name>(
id SERIAL,
original_url VARCHAR(2000),
code VARCHAR(8),
user_id INT,
redirects_count INT,
created_at TIMESTAMP
);

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

DROP TABLE <table_name>;

Получение данных из таблицы

SELECT * from <table_name> [WHERE <conditions> ];

Добавление данных в таблицу

INSERT INTO <table_name> (...fields) VALUES ();

Изменение данных в таблице

UPDATE <table_name>