ADD COLUMN
Formularz ten dodaje nową kolumnę do tabeli, używając tej samej składni co CREATE TABLE.
DROP COLUMN
Formularz ten usuwa kolumnę z tabeli. Indeksy i ograniczenia tabeli zostaną również automatycznie usunięte. Musisz powiedzieć CASCADE, jeśli cokolwiek poza tabelą zależy od kolumny, na przykład odwołania do klucza obcego lub widoki. Jeśli określono IF EXISTS, a kolumna nie istnieje, błąd nie jest rzucany.
SET DATA TYPE
Ten formularz zmienia typ kolumny tabeli. Indeksy i proste ograniczenia tabeli dotyczące kolumny zostaną automatycznie przekonwertowane do nowego typu kolumny przez ponowne przetworzenie oryginalnie podanego wyrażenia. Opcjonalna klauzula COLLATE określa kolację dla nowej kolumny; jeśli zostanie pominięta, kolacja jest domyślna dla nowego typu kolumny. Opcjonalna klauzula USING określa sposób obliczania wartości nowej kolumny na podstawie starej; jeśli zostanie pominięta, domyślna konwersja jest taka sama jak rzutowanie przypisania ze starego typu danych na nowy. Klauzula USING musi być podana, jeśli nie ma rzutowania niejawnego lub przypisania ze starego do nowego typu.
SET/DROP DEFAULT
Formularze te ustawiają lub usuwają wartość domyślną dla kolumny. Wartości domyślne mają zastosowanie tylko do kolejnych poleceń INSERT; nie powodują one zmiany wierszy już znajdujących się w tabeli. Wartości domyślne mogą być również tworzone dla widoków, w tym przypadku są one wstawiane do instrukcji INSERT widoku przed zastosowaniem reguły ON INSERT widoku.
SET/DROP NOT NULL
Formularze te zmieniają, czy kolumna jest oznaczona jako dopuszczająca wartości puste lub odrzucająca wartości puste. Możesz użyć SET NOT NULL tylko wtedy, gdy kolumna nie zawiera wartości zerowych.
SET STATISTICS
Ten formularz ustawia cel zbierania statystyk dla kolumny dla kolejnych operacji ANALYZE. Cel może być ustawiony w zakresie od 0 do 10000; alternatywnie można ustawić go na -1, aby powrócić do używania domyślnego celu statystyk systemu (default_statistics_target). Więcej informacji na temat używania statystyk przez planer zapytań PostgreSQL znajduje się w sekcji 14.2.
SET ( attribute_option = value )
RESET ( attribute_option )
Ten formularz ustawia lub resetuje opcje per-atrybut. Obecnie jedynymi zdefiniowanymi opcjami per-atrybut są n_distinct i n_distinct_inherited, które unieważniają oszacowania liczby rozróżnialnych wartości wykonane przez kolejne operacje ANALYZE. n_distinct wpływa na statystyki dla samej tabeli, podczas gdy n_distinct_inherited wpływa na statystyki zebrane dla tabeli i jej dzieci dziedziczenia. Jeśli ustawione na wartość dodatnią, ANALYZE zakłada, że kolumna zawiera dokładnie określoną liczbę odrębnych wartości nonnull. Gdy ustawione na wartość ujemną, która musi być większa lub równa -1, ANALYZE zakłada, że liczba odrębnych wartości nonnull w kolumnie jest liniowa w rozmiarze tabeli; dokładna liczba ma być obliczona przez pomnożenie szacowanego rozmiaru tabeli przez wartość bezwzględną podanej liczby. Na przykład wartość -1 oznacza, że wszystkie wartości w kolumnie są odrębne, podczas gdy wartość -0,5 oznacza, że każda wartość pojawia się średnio dwa razy. Może to być przydatne, gdy rozmiar tabeli zmienia się w czasie, ponieważ mnożenie przez liczbę wierszy w tabeli nie jest wykonywane do czasu planowania zapytania. Określenie wartości 0 powoduje powrót do normalnego szacowania liczby odrębnych wartości. Więcej informacji na temat wykorzystania statystyk przez planer zapytań PostgreSQL znajduje się w rozdziale 14.2.
SET STORAGE
Formularz ten określa tryb przechowywania kolumny. Określa, czy kolumna ma być przechowywana inline, czy w drugorzędnej tabeli TOAST oraz czy dane mają być kompresowane, czy nie. PLAIN musi być używany dla wartości o stałej długości takich jak integer i jest inline, nieskompresowany. MAIN jest dla danych inline, skompresowanych. EXTERNAL jest dla zewnętrznych, nieskompresowanych danych, a EXTENDED jest dla zewnętrznych, skompresowanych danych. EXTENDED jest wartością domyślną dla większości typów danych, które obsługują przechowywanie w formacie innym niż PLAIN. Użycie EXTERNAL spowoduje, że operacje podłańcuchowe na bardzo dużych wartościach tekstowych i bajtowych będą wykonywane szybciej, za karę w postaci zwiększonej przestrzeni dyskowej. Zauważ, że SET STORAGE nie zmienia niczego w tabeli, a jedynie ustawia strategię, która będzie stosowana podczas przyszłych aktualizacji tabeli. Zobacz sekcję 55.2 po więcej informacji.
ADD table_constraint
Ten formularz dodaje nowe ograniczenie do tabeli używając tej samej składni co CREATE TABLE, plus opcja NOT VALID, która jest obecnie dozwolona tylko dla ograniczeń klucza obcego. Jeśli ograniczenie jest oznaczone jako NOT VALID, pomijane jest potencjalnie długie początkowe sprawdzanie, czy wszystkie wiersze w tabeli spełniają ograniczenie. Ograniczenie nadal będzie wymuszane dla kolejnych wstawień lub aktualizacji (tj. nie powiedzie się, jeśli nie będzie pasującego wiersza w tabeli, do której się odwołujemy). Baza danych nie zakłada, że ograniczenie obowiązuje dla wszystkich wierszy w tabeli, dopóki nie zostanie zweryfikowane przez opcję VALIDATE CONSTRAINT.
ADD table_constraint_using_index
Ten formularz dodaje nowe ograniczenie PRIMARY KEY lub UNIQUE do tabeli na podstawie istniejącego unikalnego indeksu. Wszystkie kolumny indeksu będą zawarte w ograniczeniu.
Indeks nie może posiadać kolumn wyrażenia ani być indeksem częściowym. Ponadto, musi to być indeks b-drzewa z domyślną kolejnością sortowania. Te ograniczenia zapewniają, że indeks jest równoważny do tego, który zostałby zbudowany przez zwykłe polecenie ADD PRIMARY KEY lub ADD UNIQUE.
Jeśli określono PRIMARY KEY, a kolumny indeksu nie są już oznaczone jako NOT NULL, to polecenie spróbuje wykonać ALTER COLUMN SET NOT NULL dla każdej takiej kolumny. Wymaga to pełnego skanowania tabeli, aby zweryfikować, czy kolumna (kolumny) nie zawierają wartości null. W pozostałych przypadkach jest to szybka operacja.
Jeśli podana jest nazwa ograniczenia, wówczas nazwa indeksu zostanie zmieniona tak, aby pasowała do nazwy ograniczenia. W przeciwnym razie nazwa ograniczenia będzie taka sama jak indeksu.
Po wykonaniu tego polecenia, indeks jest „własnością” ograniczenia, w taki sam sposób, jak gdyby indeks został zbudowany przez zwykłe polecenie ADD PRIMARY KEY lub ADD UNIQUE. W szczególności, usunięcie ograniczenia spowoduje, że indeks również zniknie.
Uwaga: Dodawanie ograniczenia przy użyciu istniejącego indeksu może być pomocne w sytuacjach, gdy nowe ograniczenie musi być dodane bez blokowania aktualizacji tabeli przez długi czas. Aby to zrobić, utwórz indeks używając CREATE INDEX CONCURRENTLY, a następnie zainstaluj go jako oficjalny ogranicznik używając tej składni. Zobacz przykład poniżej.
VALIDATE CONSTRAINT
Ten formularz sprawdza poprawność ograniczenia klucza obcego, które zostało wcześniej utworzone jako NOT VALID, poprzez skanowanie tabeli, aby upewnić się, że nie ma niedopasowanych wierszy. Nic się nie dzieje, jeśli ograniczenie jest już oznaczone jako ważne.
Weryfikacja może być długim procesem na większych tabelach i obecnie wymaga blokady ACCESS EXCLUSIVE. Wartość oddzielenia walidacji od początkowego tworzenia jest taka, że możesz odroczyć walidację do mniej obciążonego czasu, lub dać dodatkowy czas na poprawienie wcześniej istniejących błędów, jednocześnie zapobiegając nowym błędom.
DROP CONSTRAINT
Ten formularz usuwa określony warunek z tabeli. Jeśli podano IF EXISTS, a ograniczenie nie istnieje, błąd nie jest wyświetlany. W tym przypadku zostanie wyświetlone powiadomienie.
ZABLOKUJ/WŁĄCZ TRIGGER
Te formularze określają sposób uruchamiania trigerów tabeli. Triger wyłączony jest nadal znany w systemie, ale nie jest wykonywany podczas wystąpienia zdarzenia wywołującego. W przypadku trigera odroczonego, status zezwolenia jest sprawdzany podczas wystąpienia zdarzenia, a nie w momencie wykonania funkcji trigera. Możesz wyłączyć lub włączyć pojedynczy triger, lub wszystkie trigery tabeli, lub tylko trigery użytkownika (opcja ta nie obejmuje trigerów generowanych wewnętrznie, takich jak trigery kluczy obcych, unikalności i wykluczeń). Wyłączenie lub włączenie wewnętrznie wygenerowanych trigerów wymaga uprawnień superużytkownika; należy to robić z rozwagą, ponieważ integralność ograniczeń nie może być zagwarantowana, jeśli trigery nie są wykonywane. Na mechanizm wyzwalania trigerów ma również wpływ zmienna konfiguracyjna session_replication_role. Po prostu włączone trigery będą uruchamiane, gdy rola replikacji jest „origin” (domyślnie) lub „local”. Wyzwalacze skonfigurowane jako ENABLE REPLICA odpalą się tylko wtedy, gdy sesja jest w trybie „repliki”, a wyzwalacze skonfigurowane jako ENABLE ALWAYS odpalą się niezależnie od bieżącego trybu replikacji.
DISABLE/ENABLE RULE
Te formularze konfigurują odpalanie reguł przepisywania należących do tabeli. Wyłączona reguła jest nadal znana systemowi, ale nie jest stosowana podczas przepisywania zapytań. Semantyka jest taka sama jak dla trigerów disabled/enabled. Ta konfiguracja jest ignorowana dla reguł ON SELECT, które są zawsze stosowane w celu zapewnienia działania widoków, nawet jeśli bieżąca sesja nie jest w domyślnej roli replikacji.
CLUSTER
Ten formularz wybiera domyślny indeks dla przyszłych operacji CLUSTER. Nie powoduje to ponownego klastrowania tabeli.
SET WITHOUT CLUSTER
Formularz ten usuwa ostatnio używaną specyfikację indeksu CLUSTER z tabeli. Ma to wpływ na przyszłe operacje klastrowania, które nie określają indeksu.
SET WITH OIDS
Formularz ten dodaje kolumnę systemową oid do tabeli (zobacz sekcję 5.4). Nie robi nic, jeśli tabela ma już OID.
Zauważ, że nie jest to równoważne z ADD COLUMN oid oid; to doda zwykłą kolumnę o nazwie oid, a nie kolumnę systemową.
SET WITHOUT OIDS
Ta forma usuwa kolumnę systemową oid z tabeli. Jest to dokładnie równoważne DROP COLUMN oid RESTRICT, z wyjątkiem tego, że nie będzie narzekać, jeśli nie ma już kolumny oid.
SET ( storage_parameter = value )
Ten formularz zmienia jeden lub więcej parametrów przechowywania dla tabeli. Zobacz Parametry przechowywania aby uzyskać więcej informacji na temat dostępnych parametrów. Zauważ, że zawartość tabeli nie zostanie zmodyfikowana natychmiast przez to polecenie; w zależności od parametru może być konieczne przepisanie tabeli, by uzyskać pożądane efekty. Można to zrobić za pomocą VACUUM FULL, CLUSTER lub jednej z form ALTER TABLE, która wymusza przepisanie tabeli.
Uwaga: Podczas gdy CREATE TABLE pozwala na określenie OIDS w składni WITH (storage_parameter), ALTER TABLE nie traktuje OIDS jako parametru przechowywania. Zamiast tego użyj formularzy SET WITH OIDS i SET WITHOUT OIDS, aby zmienić status OID.
RESET ( storage_parameter )
Ten formularz resetuje jeden lub więcej parametrów przechowywania do wartości domyślnych. Podobnie jak w przypadku SET, może być wymagane przepisanie tabeli, aby ją całkowicie zaktualizować.
INHERIT parent_table
Formularz ten dodaje tabelę docelową jako nowe dziecko określonej tabeli nadrzędnej. Od tej pory zapytania do tabeli nadrzędnej będą zawierały rekordy tabeli docelowej. Aby tabela docelowa mogła zostać dodana jako potomek, musi zawierać te same kolumny co rodzic (może także zawierać dodatkowe kolumny). Kolumny muszą mieć pasujące typy danych i jeśli mają ograniczenia NOT NULL w rodzicu, to muszą mieć również ograniczenia NOT NULL w dziecku.
Muszą również istnieć pasujące ograniczenia tabeli dziecka dla wszystkich ograniczeń CHECK rodzica. Obecnie ograniczenia UNIQUE, PRIMARY KEY i FOREIGN KEY nie są brane pod uwagę, ale może się to zmienić w przyszłości.
NO INHERIT parent_table
Ten formularz usuwa tabelę docelową z listy dzieci określonej tabeli nadrzędnej. Zapytania względem tabeli nadrzędnej nie będą już zawierać rekordów pobranych z tabeli docelowej.
OF type_name
Ten formularz łączy tabelę z typem złożonym, tak jakby CREATE TABLE OF ją utworzyło. Lista nazw kolumn i typów tabeli musi dokładnie odpowiadać liście typu złożonego; dozwolona jest różnica w obecności kolumny systemowej oid. Tabela nie może dziedziczyć po żadnej innej tabeli. Te ograniczenia zapewniają, że CREATE TABLE OF pozwoli na równoważną definicję tabeli.
NOT OF
Formularz ten oddziela tabelę od jej typu.
OWNER
Formularz ten zmienia właściciela tabeli, sekwencji lub widoku na określonego użytkownika.
SET TABLESPACE
Formularz ten zmienia przestrzeń tabel na określoną przestrzeń tabel i przenosi plik(i) danych powiązany(e) z tabelą do nowej przestrzeni tabel. Indeksy tabeli, jeśli istnieją, nie są przenoszone, ale mogą być przeniesione oddzielnie za pomocą dodatkowych poleceń SET TABLESPACE. Zobacz także CREATE TABLESPACE.
RENAME
Formularze RENAME zmieniają nazwę tabeli (lub indeksu, sekwencji lub widoku) lub nazwę pojedynczej kolumny w tabeli. Nie ma żadnego wpływu na przechowywane dane.
SET SCHEMA
Formularz ten przenosi tabelę do innego schematu. Powiązane indeksy, ograniczenia i sekwencje są również przenoszone
.