FoxelyssFoxelyss
Время чтения: 3 min
Изменено:18.09.2026, 19:09:51

Создание типов данных в SQL

Типы данных — это определённый формат, структура и допустимые значения для поля.

Команды:

  • create type — создание типа данных
  • alter type — изменение типа данных
  • drop type — удаление типа данных

Общий вид: create type ИНДФ as ВИД(наполнение в зависимости от вида)

Виды:

  1. enum — перечисление. Тип данных, в котором может приниматься одно из значений, указанных при создании типа. Общий тип: create type ИНДФ as enum('знач1','знач2')

Пример:

create type Pol as enum('М','Ж');

create table gr632_test12(
пол Pol not null
)

insert into gr632_test12 values ('М');

alter type Pol add value 'О'; -- Добавление значения

alter type Pol drop value 'О'; -- Удаление значения

drop type Pol cascade -- Если уже используется тип при удалении
  1. domain — позволяет добавить ограничение (null, check, unique ...) на тип данных.

Общий вид:

create domain ИНДФ as типдан ограничения

Пример:

create domain not_null_int as int not null;

create table gr632_test13(
a not_null_int,
b int
);

insert into gr632_test13(b) values (12);

Изменение существующего domain:

alter domain ИНДФ set|drop огр

Пример:

alter domain FFK set unique
-- alter domain FFK drop unique нельзя!

Удаление domain: drop domain ИНДФ cascade

  1. composite — позволяет объединить несколько полей в один тип данных, и к этим полям можно обращаться отдельно.

Общий вид:

create type ИНДФ as(ИДС типдан, ИДС типдан)

create type Адрес as (Улица varchar, Дом int, Квартира int);

create table gr632_test15(
id serial,
Адрес Адрес
);

insert into gr632_test15 values (1, ('Ленина', 12, 45));

Для уточнения, из какой части подстолбца взять данные, нужно заключить её в скобки.

select (Адрес).Дом from gr632_test15;

create type ФИО as (Фамилия text, Имя varchar, Отчество text);

Можно использовать в функциях:

create or replace function gr632()
returns Адрес as $$
begin
return (select t from (select 'asdsad'::varchar  as Улица, 12 as Дом, 3 as Квартира) t);
end; $$
language plpgsql;

select gr632(); 
  1. range — диапазонные типы данных, которые представляют интервалы значений (например, от 100 до 2000 или от 1999-10-10 до 2000-10-10). То есть создаём типы данных, к которым можно применить range в запросе.

В Postgres существуют стандартные range-типы данных: int4range, int8range - для целочисленных numrange- для дробных tsrange, tstzrange, daterange - для даты и времени

Для создания своего типа

Общий вид:

create type ИНДФ as range(subtype = ... subtype_dif)

create type цена_range as range (subtype = numeric)

  1. Base type - это собственный тип данных, который создаётся при помощи других языков программирования(С/с++)

Общий вид:

create type ИНДФ(
Операторы и фукнции си
)

Пример:

create type complex(
input = complex_in,
output - complex_out,
internallength = 16
);
  1. Псевдотип — это типы данных, которые нельзя использовать при создании таблиц, но можно использовать в функциях:
  • record - принимает всё что угодно
  • void - без возвращаемого значения
  • anyarray - любой массив
  • anyelement - любой тип данных
  • cstring - указатель на строку