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.