Eksempel: Å lage en brukerdefinert datatype i C

Steg 1: Definer datatypen og input- og output-funksjoner i C.
Se på koden her

Steg 2: Kompiler koden som shared object.

gcc -L/usr/lib/pgsql -I/usr/include/pgsql/server -lpq -lm -shared -o rettvinklaTrekant.so rettvinklaTrekant.c

Steg 3: Opprett funksjonene, datatypen og en testtabell i psql

CREATE FUNCTION rvt_in(cstring)
    RETURNS rettvinklaTrekant
    AS '/home/ansatte/elinkaan/moddb/rettvinklaTrekant.so'
    LANGUAGE C IMMUTABLE STRICT;

CREATE FUNCTION rvt_out(rettvinklaTrekant)
    RETURNS cstring
    AS '/home/ansatte/elinkaan/moddb/rettvinklaTrekant.so'
    LANGUAGE C IMMUTABLE STRICT;

CREATE TYPE rettvinklaTrekant ( 
   internallength = 24, 
   input = rvt_in,
   output = rvt_out,
   alignment = double
);

CREATE TABLE test_rvt (
  id int not null,
  r1 rettvinklaTrekant,
  primary key(id)
);

Steg 4: Legg inn testdata for å sjekke at alt er ok

INSERT INTO test_rvt VALUES (1, '( 3.0, 4.0, 5.0 )');
INSERT 4948356 1
INSERT INTO test_rvt VALUES (2, '( -3.0, 4.0, 5.0 )');
INSERT 4948357 1
INSERT INTO test_rvt VALUES (3, '( 3.0, -4.0, 5.0 )');
INSERT 4948358 1
INSERT INTO test_rvt VALUES (4, '( 3.0, 4.0, -5.0 )');
INSERT 4948359 1
INSERT INTO test_rvt VALUES (5, '( 3.0, -4.0, -5.0 )');
ERROR:  rvt_in: det er kun en av sidene som kan være ukjent
INSERT INTO test_rvt VALUES (6, '( 2.1, 3.2, hva )');
ERROR:  rvt_in: error in parsing "( 2.1, 3.2, hva )"
INSERT INTO test_rvt VALUES (6, '( 3.0, 4.0, 6.0 )');
ERROR:  rvt_in: du har tastet inn feil data, hypotenusen er 5.000000, ikke 6.000000

SELECT * FROM test_rvt;
 id |   r1    
----+---------
  1 | (3,4,5)
  2 | (3,4,5)
  3 | (3,4,5)
  4 | (3,4,5)
(4 rows)

Steg 5: Rydd opp etter deg

drop table test_rvt;
drop type rettvinklaTrekant CASCADE;