7 Nisan 2021 Çarşamba

CREATE TYPE

Örnek - ENUM
Elimizde şöyle bir PostgreSQL tablosu olsun. Burada order_status isimli yeni bir type yarattık.
CREATE TYPE order_status AS ENUM(
  'Ordered', 
  'Baking', 
  'Delivering', 
  'YummyInMyTummy');

CREATE TABLE pizza_order (
  id INT PRIMARY KEY,
  status order_status NOT NULL,
  order_time TIMESTAMP NOT NULL DEFAULT now()
);
Şu SQL çalışır, çünkü status tipi olarak CREATE TYPE ile belirtilen bir string verdik
> INSERT INTO pizza_order (id, status, order_time) 
VALUES (1, 'Ordered', now());
VARCAHR ve ENUM arasında dönüşüm için bir cast yaratırız. 
CREATE CAST (varchar AS order_status) WITH INOUT AS IMPLICIT;
Örnek
Şöyle yaparız
CREATE TYPE address AS (
  city TEXT,
  address_line TEXT,
  zip_code INT
);
Bu type'tan başka bir şey üretmek için şöyle yaparız
CREATE DOMAIN address_domain AS address 
check (
  (value).city is not null and 
  (value).address_line is not null and
  (value).zip_code is not null
);
Kullanmak için şöyle yaparız
> CREATE TABLE test_address_domain (a address_domain);
CREATE TABLE
> INSERT INTO test_address_domain VALUES (('foo', 'bar', 11));
INSERT 0 1
> INSERT INTO test_address_domain VALUES (('foo', 'bar', null)); -- fails
ERROR: value for domain address_domain violates check constraint "address_domain_check"