postgres data type custom - ghdrako/doc_snipets GitHub Wiki

SQL structure types

CREATE TYPE serveur AS ( 
nom text, 
adresse_ip inet, 
administrateur text );

Tego typu dane można stosować we wszystkich standardowych obiektach SQL: tabelach, procedurach, operatorach (np. w celu ponownego zdefiniowania operatora), funkcjach agregujących, ograniczeniach itp.

Mozna dla takich typów definiować operatory, funkcje agregujace, ograniczenia.

CREATE OPERATOR + (
 leftarg = stock,
 rightarg = stock,
 procedure = stock_fusion,
 commutator = + );

Domain types

Możliwe jest również zdefiniowanie domen. Są to typy tworzone przez użytkowników poprzez rozpoczęcie od typu bazowego i dodanie do niego dodatkowych ograniczeń.

CREATE DOMAIN code_postal_francais AS text CHECK (value ~ '^\d{5}$');
ALTER TABLE capitaines ADD COLUMN cp code_postal_francais;
UPDATE capitaines SET cp = '35400' WHERE nom LIKE '%Surcouf';
UPDATE capitaines SET cp = '1420' WHERE nom = 'Haddock';
ERROR: value for domain code_postal_francais violates check constraint "code_postal_francais_check" UPDATE capitaines SET cp = '01420' WHERE nom = 'Haddock';
SELECT * FROM capitaines;
id | nom | age | num_cartecredit | cp ----+----------------+-----+------------------+-------1 | Robert Surcouf | 20 | 1234567890123456 | 35400 1 | Haddock | 35 | | 01420 Les

Domeny umożliwiają zintegrowanie deklaracji ograniczeń z deklaracją typu, a zatem uproszczenie konserwacji aplikacji, jeśli to może być może zostać ujęte w kilku tabelach: Jeśli wyzwanie kodu pocztowego jest niezgłębione możliwe, aby zmodyfikować go przez domenę alter i zdefiniowanie nowych ograniczeń w domenie. Ograniczenia te zostaną zweryfikowane na wszystkich polach z domeną jako typ, zanim nowa wersja typu zostanie uznana za ważną.

Wadą w porównaniu do klasycznych ograniczeń CHECK dotyczących tabeli jest to, że ponieważ informacja nie znajduje się w tabeli, trudniej jest wymienić ograniczenia w tabeli.

Typy wyliczenie enums

Istnieją również typy wyliczeniowe. Są to typy tworzone przez użytkownika, składające się z uporządkowanej listy ciągów znaków.

CREATE TYPE jour_semaine AS ENUM ('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
ALTER TABLE capitaines ADD COLUMN jour_sortie jour_semaine;
UPDATE capitaines SET jour_sortie = 'Mardi' WHERE nom LIKE '%Surcouf';
UPDATE capitaines SET jour_sortie = 'Samedi' WHERE nom LIKE 'Haddock';
SELECT * FROM capitaines WHERE jour_sortie >= 'Jeudi';
id | nom | age | num_cartecredit | cp | jour_sortie 
----+---------+-----+-----------------+----+-------------
1 | Haddock | 35 | | | Samedi Les

Enums umożliwia zdefiniowanie listy wartości statycznych w słowniku danych wcześnie tylko w zewnętrznej tabeli, w której powinniśmy dodać połączenia: W przykładzie możemy stworzyć dzień day_de_la_semaine i przechowywać klucz związany z planowaniem. Moglibyśmy również ustawić ograniczenie kontroli, ale nie moglibyśmy mieć uporządkowanej listy.