Tabele są podstawowymi, lecz nie jedynymi obiektami, jakie można zdefiniować w języku SQL. Poniżej znajdują się krótkie opisy sposobu definiowania obiektów w PostgreSQL
Liczniki
Licznik (SEQUENCE) to obiekt, który automatycznie zmienia swoją wartość po każdym jego odczycie. Obiekty tego typu najczęściej wykorzystywane są do uzupełniania pól będących kluczami głównymi tabel. Klucz definiujemy w sposób następujący:
CREATE SEQUENCE nazwa_licznika
[INCREMENT skok]
[START poczatek]
[MINVALUE minimum]
[MAXVALUE maksimum]
[CYCLE]
Znaczenie poszczególnych parametrów jest następujące: "nazwa_licznika" to jego identyfikator, do którego się odwołujemy, "skok" to wartość o jaką będzie się zwiększał licznik (podając liczbę ujemną spowodujemy, że licznik będzie zliczał w dół),"poczatek" liczba od której rozpocznie się zliczanie, "minimum" to minimalna wartość jaką może osiągnąć licznik, "maksimum" to maksymalna wartość jaką może osiągnąć licznik, "CYCLE" to opcjonalny parametr oznaczający, że po osiągnięciu wartości maksymalnej licznik zacznie zliczać od wartości początkowej. Przykład definicji typowego licznika znajduje się poniżej:
CREATE SEQUENCE licznik_id;
W ten sposób powstanie licznik zliczający w górę od wartości "0". Wykorzystanie tak zdefiniowanego licznika umożliwia funkcja nextval('nazwa_licznika') Przykład w rozdziale o definicji tabel.
Widoki - perspektywy
Widok, czy inaczej perspektywa to tabela wirtualna. Nie jest ona zapisywana w bazie danych, powstaje w wyniku wykonania polecenia SQL. Z widoków można korzystać tak samo jak ze zwykłych tabel. Widoki służą do dostosowania wizualizacji danych dla poszczególnych grup użytkowników bazy danych. Widoki definiuje się identycznie jak tabele przez zapytanie:
CREATE VIEW Produkty_software AS
SELECT nazwa,opis FROM Produkty WHERE kod_produktu='software';
Indeksy
Indeksy umożliwiają sprawne wyszukiwanie informacji w bazach danych. Zmniejszają czas potrzebny do wykonania zapytań SQL. Definicja nowego indeksu wygląda następująco:
CREATE [UNIQUE] INDEX nazwa_indeksu ON nazwa_tabeli(nazwa_pola,...);
Funkcje
Język PostgreSQL umożliwia definiowanie własnych funkcji. Wywołanie funkcji następuje w sposób identycznyjak funkcji wbudowanych. Przykładowa definicja funkcji przedstawiona została poniżej
CREATE FUNCTION dzien_tygodnia(int4) RETURNS varchar(15) AS
'SELECT dzien FROM dni_tygodnia WHERE id=$1;'
LANGUAGE 'sql'
Powyższa funkcja zwraca nazwę dnia tygodnia na podstawie podanego id (1-7). Definicja funkcji jest możliwia pod warunkiem, że istnieje tabela "dni_tygodnia" posiadająca pola "dzien" i "id". Funkcja zwraca jedną wartość typu varchar(15). Jeśli do funkcji chcemy przekazać większą liczbę argumentów, to odwołujemy się do nich wewnątrz funkcji za pomocą zmiennych "$1,$2"... itd.
Wyzwalacze - triggery
Wyzwalacze są procedurami, które uruchamiają się automatycznie w momencie wystąpienia określonej akcji. Podstawowym przeznaczeniem wyzwalaczy jest utrzymanie spójności w bazie danych. Ze względu na kolejność uruchomienia możemy podzielić wyzwalacze na dwie grupy:
- Wyzwalacze uruchamiane przed określoną akcją - (BEFORE),
- Wyzwalacze uruchamiane po określonej akcji - (AFTER).
Niezależnie od typu, wyzwalacze mogą być uruchamiane w wyniku wykonania jednego z następujących poleceń: INSERT, UPDATE, DELETE Składnia definicji wyzwalacza przedstawiona została pomiżej:
CREATE TRIGGER nazwa_wyzwalacza {BEFORE|AFTER}
{[INSERT] [OR UPDATE] [OR DELETE]}
ON nazwa_tabeli FOR EACH ROW
EXECUTE PROCEDURE nazwa_procedury(argument1,...);
Wyzwalacz może być uruchamiany przed lub po jednej lub kilku operacji (INSERT, UPDATE, DELETE). "Nazwa_procedury" to nazwa procedury, która ma się wykonać w przed, lub po określonej akcji. Procedura może być napisana w języku C lub PL/SQL.