CREATE TABLE
СинÑакÑиÑ
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
{ имÑ_колонки Ñип_даннÑÑ
[ COLLATE пÑавило_ÑоÑÑиÑовки ] [ огÑаниÑение_колонки [ ... ] ]
| огÑаниÑение_ÑаблиÑÑ
| LIKE иÑÑ
однаÑ_ÑаблиÑа [ ваÑианÑ_копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ... ] }
[, ... ]
] )
[ INHERITS ( ÑаблиÑа_ÑодиÑÐµÐ»Ñ [, ... ] ) ]
[ WITH ( паÑамеÑÑ_Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ [= знаÑение] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE Ñабл_пÑоÑÑÑанÑÑво ]
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
OF имÑ_Ñипа [ (
{ имÑ_колонки WITH OPTIONS [ огÑаниÑение_колонки [ ... ] ]
| огÑаниÑение_ÑаблиÑÑ }
[, ... ]
) ]
[ WITH ( паÑамеÑÑ_Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ [= знаÑение] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE Ñабл_пÑоÑÑÑанÑÑво ]
ÐдеÑÑ Ð¾Ð³ÑаниÑение_колонки:
[ CONSTRAINT имÑ_огÑаниÑÐµÐ½Ð¸Ñ ]
{ NOT NULL |
NULL |
CHECK ( вÑÑажение ) [ NO INHERIT ] |
DEFAULT вÑÑажение_по_ÑмолÑÐ°Ð½Ð¸Ñ |
UNIQUE паÑамеÑÑÑ_индекÑа |
PRIMARY KEY паÑамеÑÑÑ_индекÑа |
REFERENCES ÑелеваÑ_ÑаблиÑа [ ( ÑелеваÑ_колонка ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE дейÑÑвие ] [ ON UPDATE дейÑÑвие ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
и огÑаниÑение_ÑаблиÑÑ:
[ CONSTRAINT имÑ_огÑаниÑÐµÐ½Ð¸Ñ ]
{ CHECK ( вÑÑажение ) [ NO INHERIT ] |
UNIQUE ( имÑ_колонки [, ... ] ) паÑамеÑÑÑ_индекÑа |
PRIMARY KEY ( имÑ_колонки [, ... ] ) паÑамеÑÑÑ_индекÑа |
EXCLUDE [ USING меÑод_индекÑа ] ( ÑлеменÑ_иÑклÑÑÐµÐ½Ð¸Ñ WITH опеÑаÑÐ¾Ñ [, ... ] ) паÑамеÑÑÑ_индекÑа [ WHERE ( пÑÐµÐ´Ð¸ÐºÐ°Ñ ) ] |
FOREIGN KEY ( имÑ_колонки [, ... ] ) REFERENCES ÑелеваÑ_ÑаблиÑа [ ( ÑелеваÑ_колонка [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE дейÑÑвие ] [ ON UPDATE дейÑÑвие ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
и ваÑианÑ_копиÑованиÑ:
{ INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | ALL }
паÑамеÑÑÑ_индекÑа в огÑаниÑениÑÑ
UNIQUE, PRIMARY KEY и EXCLUDE:
[ WITH ( паÑамеÑÑ_Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ [= знаÑение] [, ... ] ) ]
[ USING INDEX TABLESPACE Ñабл_пÑоÑÑÑанÑÑво ]
ÑлеменÑ_иÑклÑÑÐµÐ½Ð¸Ñ Ð² огÑаниÑении EXCLUDE:
{ имÑ_колонки | ( вÑÑажение ) } [ клаÑÑ_опеÑаÑоÑов ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]ÐпиÑание
CREATE TABLE ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ, изнаÑалÑно пÑÑÑÑÑ ÑаблиÑÑ Ð² ÑекÑÑей базе даннÑÑ . ÐладелÑÑем ÑаблиÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑполнивÑий ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.
ÐÑли задано Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ (напÑимеÑ, CREATE TABLE myschema.mytable ...), ÑаблиÑа ÑоздаÑÑÑÑ Ð² Ñказанной ÑÑ ÐµÐ¼Ðµ, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей. ÐÑеменнÑе ÑаблиÑÑ ÑÑÑеÑÑвÑÑÑ Ð² ÑпеÑиалÑной ÑÑ ÐµÐ¼Ðµ, Ñак ÑÑо пÑи Ñоздании ÑÐ°ÐºÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ Ð·Ð°Ð´Ð°ÑÑ Ð½ÐµÐ»ÑзÑ. ÐÐ¼Ñ ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑÐ³Ð¸Ñ ÑаблиÑ, поÑледоваÑелÑноÑÑей, индекÑов, пÑедÑÑавлений или ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð² ÑÑой ÑÑ ÐµÐ¼Ðµ.
CREATE TABLE Ñакже авÑомаÑиÑеÑки ÑоздаÑÑ ÑоÑÑавной Ñип даннÑÑ , ÑооÑвеÑÑÑвÑÑÑий одной ÑÑÑоке ÑаблиÑÑ. Таким обÑазом, Ð¸Ð¼Ñ ÑаблиÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑовпадаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑÑÑеÑÑвÑÑÑего Ñипа в ÑÑой же ÑÑ ÐµÐ¼Ðµ.
ÐеобÑзаÑелÑнÑе пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений задаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ (пÑовеÑки), коÑоÑÑм Ð´Ð¾Ð»Ð¶Ð½Ñ ÑдовлеÑвоÑÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑемÑе или изменÑемÑе ÑÑÑоки, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñла вÑполнена ÑÑпеÑно. ÐгÑаниÑение пÑедÑÑавлÑÐµÑ Ñобой SQL-обÑекÑ, помогаÑÑий некоÑоÑÑм ÑпоÑобом опÑеделиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво допÑÑÑимÑÑ Ð·Ð½Ð°Ñений в ÑаблиÑе.
ÐпÑеделиÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ двÑÐ¼Ñ ÑпоÑобами: в виде огÑаниÑений ÑаблиÑÑ Ð¸ в виде огÑаниÑений колонки. ÐгÑаниÑение колонки опÑеделÑеÑÑÑ ÐºÐ°Ðº ÑаÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, а огÑаниÑение ÑаблиÑÑ Ð½Ðµ пÑивÑзÑваеÑÑÑ Ðº конкÑеÑной колонке и Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ Ð½ÐµÑколÑко колонок. ÐÑбÑе огÑаниÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº можно Ñакже запиÑаÑÑ Ð² виде огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ, они Ð²Ð²ÐµÐ´ÐµÐ½Ñ Ð¿ÑоÑÑо Ð´Ð»Ñ ÑдобÑÑва запиÑи в ÑлÑÑаÑÑ , когда огÑаниÑение заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ ÑолÑко Ð¾Ð´Ð½Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ ÑаблиÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ñипов вÑÐµÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº или Ñипа в пÑедложении OF, ÑооÑвеÑÑÑвенно.
ÐаÑамеÑÑÑ
- TEMPORARY или TEMP
С Ñаким Ñказанием ÑаблиÑа ÑоздаÑÑÑÑ ÐºÐ°Ðº вÑеменнаÑ. ÐÑеменнÑе ÑаблиÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑдалÑÑÑÑÑ Ð² конÑе ÑеанÑа или могÑÑ ÑдалÑÑÑÑÑ Ð² конÑе ÑекÑÑей ÑÑанзакÑии (Ñм. опиÑание ON COMMIT ниже). СÑÑеÑÑвÑÑÑÐ°Ñ Ð¿Ð¾ÑÑоÑÐ½Ð½Ð°Ñ ÑаблиÑа Ñ Ñем же именем не бÑÐ´ÐµÑ Ð²Ð¸Ð´Ð½Ð° в ÑекÑÑем ÑеанÑе, пока ÑÑÑеÑÑвÑÐµÑ Ð²ÑеменнаÑ, однако к ней можно обÑаÑиÑÑÑÑ, дополнив Ð¸Ð¼Ñ Ñказанием ÑÑ ÐµÐ¼Ñ. ÐÑе индекÑÑ, ÑоздаваемÑе Ð´Ð»Ñ Ð²Ñеменной ÑаблиÑÑ, Ñак же авÑомаÑиÑеÑки ÑÑановÑÑÑÑ Ð²ÑеменнÑми.
Ðемон авÑооÑиÑÑки не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑиÑаÑÑ Ð¸, как ÑледÑÑвие, ÑжимаÑÑ Ð¸ анализиÑоваÑÑ Ð²ÑеменнÑе ÑаблиÑÑ. Ðо ÑÑой пÑиÑине ÑооÑвеÑÑÑвÑÑÑие опеÑаÑии оÑиÑÑки и анализа ÑледÑÐµÑ Ð²ÑполнÑÑÑ, вÑзÑÐ²Ð°Ñ SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑеанÑа. ÐапÑимеÑ, еÑли вÑеменнÑÑ ÑаблиÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð² ÑложнÑÑ Ð·Ð°Ð¿ÑоÑÐ°Ñ , бÑÐ´ÐµÑ ÑазÑмнÑм вÑполниÑÑ Ð´Ð»Ñ Ð½ÐµÑ ANALYZE поÑле Ñого, как она бÑÐ´ÐµÑ Ð½Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð°.
Ðо Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ñказание GLOBAL или LOCAL пеÑед TEMPORARY или TEMP. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ PostgreSQL и ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑей возможноÑÑÑÑ; Ñм. СовмеÑÑимоÑÑÑ.
- UNLOGGED
С ÑÑим Ñказанием ÑаблиÑа ÑоздаÑÑÑÑ ÐºÐ°Ðº нежÑÑналиÑÑемаÑ. ÐаннÑе, запиÑÑваемÑе в нежÑÑналиÑÑемÑе ÑаблиÑÑ, не пÑÐ¾Ñ Ð¾Ð´ÑÑ ÑеÑез жÑÑнал ÑпÑеждаÑÑей запиÑи (Ñм. ÐÐ»Ð°Ð²Ñ 29), в ÑезÑлÑÑаÑе Ñего Ñакие ÑаблиÑÑ ÑабоÑаÑÑ Ð³Ð¾Ñаздо бÑÑÑÑее обÑÑнÑÑ . Ðднако, они не заÑиÑÐµÐ½Ñ Ð¾Ñ ÑбоÑ; пÑи Ñбое или аваÑийном оÑклÑÑении ÑеÑвеÑа нежÑÑналиÑÑÐµÐ¼Ð°Ñ ÑаблиÑа авÑомаÑиÑеÑки ÑÑекаеÑÑÑ. ÐÑоме Ñого, ÑодеÑжимое нежÑÑналиÑÑемой ÑаблиÑÑ Ð½Ðµ ÑеплиÑиÑÑеÑÑÑ Ð½Ð° ÑезеÑвнÑе ÑеÑвеÑÑ. ÐÑбÑе индекÑÑ, ÑоздаваемÑе Ð´Ð»Ñ Ð½ÐµÐ¶ÑÑналиÑÑемой ÑаблиÑÑ, авÑомаÑиÑеÑки ÑÑановÑÑÑÑ Ð½ÐµÐ¶ÑÑналиÑÑемÑми.
- IF NOT EXISTS
Ðе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли оÑноÑение Ñ Ñаким именем Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание. ÐамеÑÑÑе, ÑÑо Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ гаÑанÑии, ÑÑо ÑÑÑеÑÑвÑÑÑее оÑноÑение как-Ñо ÑооÑноÑиÑÑÑ Ñ Ñем, коÑоÑое могло Ð±Ñ Ð±ÑÑÑ Ñоздано.
- table_name
ÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) Ñоздаваемой ÑаблиÑÑ.
- OF имÑ_Ñипа
СоздаÑÑ ÑипизиÑованнÑÑ ÑаблиÑÑ, ÑÑÑÑкÑÑÑа коÑоÑой опÑеделÑеÑÑÑ ÑказаннÑм ÑоÑÑавнÑм Ñипом (его Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ ÑÑ ÐµÐ¼Ð¾Ð¹). ТипизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑаблиÑа пÑивÑзана к поÑодивÑÐµÐ¼Ñ ÐµÑ ÑипÑ; напÑимеÑ, пÑи Ñдалении Ñипа (командой DROP TYPE ... CASCADE) бÑÐ´ÐµÑ Ñдалена и ÑÑа ÑаблиÑа.
Ðогда ÑоздаÑÑÑÑ ÑипизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑаблиÑа, ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÐµÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº опÑеделÑÑÑÑÑ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñим ÑоÑÑавнÑм Ñипом, а не задаÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ CREATE TABLE. Ðо CREATE TABLE Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð² ÑаблиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ огÑаниÑениÑ, а Ñакже задаÑÑ Ð¿Ð°ÑамеÑÑÑ ÐµÑ Ñ ÑанениÑ.
- имÑ_колонки
ÐÐ¼Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, Ñоздаваемой в новой ÑаблиÑе.
- Ñип_даннÑÑ
Тип даннÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ (Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¾Ð¿Ñеделение маÑÑива Ñ ÑÑим Ñипом). Ðа дополниÑелÑнÑми ÑведениÑми о ÑÐ¸Ð¿Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÑе поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ PostgreSQL, обÑаÑиÑеÑÑ Ðº Ðлаве 8.
- COLLATE пÑавило_ÑоÑÑиÑовки
ÐÑедложение COLLATE назнаÑÐ°ÐµÑ Ð¿Ñавило ÑоÑÑиÑовки Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ (коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ Ñип, поддеÑживаÑÑий ÑоÑÑиÑовкÑ). ÐÑли оно оÑÑÑÑÑÑвÑеÑ, иÑполÑзÑеÑÑÑ Ð¿Ñавило ÑоÑÑиÑовки по ÑмолÑаниÑ, ÑÑÑановленное Ð´Ð»Ñ Ñипа даннÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸.
- INHERITS ( ÑаблиÑа_ÑодиÑÐµÐ»Ñ [, ... ] )
ÐеобÑзаÑелÑное пÑедложение INHERITS опÑеделÑÐµÑ ÑпиÑок ÑаблиÑ, Ð¾Ñ ÐºÐ¾ÑоÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑаблиÑа бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки наÑледоваÑÑ Ð²Ñе колонки.
ÐÑи иÑполÑзовании INHERITS ÑоздаÑÑÑÑ Ð¿Ð¾ÑÑоÑÐ½Ð½Ð°Ñ ÑвÑÐ·Ñ Ð´Ð¾ÑеÑней ÑаблиÑÑ Ñ ÑодиÑелÑÑкими. ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑ ÐµÐ¼Ñ Ð² ÑодиÑелÑÑÐºÐ¸Ñ ÑаблиÑÐ°Ñ Ð¾Ð±ÑÑно Ñакже оÑÑажаÑÑÑÑ Ð² доÑеÑÐ½Ð¸Ñ , и по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи ÑÑении ÑодиÑелÑÑÐºÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð² ÑезÑлÑÑÐ°Ñ Ð²ÐºÐ»ÑÑаÑÑÑÑ Ð´Ð°Ð½Ð½Ñе доÑеÑней ÑаблиÑÑ.
Ðогда в неÑколÑÐºÐ¸Ñ ÑодиÑелÑÑÐºÐ¸Ñ ÑаблиÑÐ°Ñ Ð¾ÐºÐ°Ð·ÑваÑÑÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ Ñ Ð¾Ð´Ð½Ð¸Ð¼ именем, пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка, за иÑклÑÑением ÑлÑÑаÑ, когда ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²ÑÐµÑ ÑÑÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº в ÑаблиÑÐ°Ñ ÑовпадаÑÑ. Ð ÑÑом ÑлÑÑае одноимÑннÑе колонки обÑединÑÑÑÑÑ Ð¸ ÑоÑмиÑÑÑÑ Ð¾Ð´Ð½Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð² новой ÑаблиÑе. ÐÑли Ð¸Ð¼Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ новой ÑаблиÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ одной из ÑнаÑледованнÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, Ð¸Ñ ÑÐ¸Ð¿Ñ Ñак же Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ, и в ÑÑом ÑлÑÑае опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº Ñоже ÑливаÑÑÑÑ Ð² однÑ. ÐÑли в новой ÑаблиÑе Ñвно ÑказÑваеÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ колонки, ÑÑо знаÑение пеÑеопÑеделÑÐµÑ Ð»ÑбÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, ÑнаÑледованнÑе ÑÑой колонкой. РпÑоÑивном ÑлÑÑае, еÑли знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð² ÑазнÑÑ ÑодиÑелÑÑÐºÐ¸Ñ ÑаблиÑÐ°Ñ , ÑÑи опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ, инаÑе пÑоизойдÑÑ Ð¾Ñибка.
ÐгÑаниÑÐµÐ½Ð¸Ñ CHECK обÑединÑÑÑÑÑ Ð²Ð¼ÐµÑÑе по ÑÑÑи Ñак же, как и колонки: еÑли неÑколÑко ÑодиÑелÑÑÐºÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸/или опÑеделение новой ÑаблиÑÑ ÑодеÑÐ¶Ð°Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑе огÑаниÑÐµÐ½Ð¸Ñ CHECK, ÑÑим огÑаниÑениÑм Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑовеÑки, в пÑоÑивном ÑлÑÑае пÑоизойдÑÑ Ð¾Ñибка. Ð ÑлÑÑае ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð²ÑÑажениÑ, ÑÑи огÑаниÑÐµÐ½Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ñм вÑÑажением обÑединÑÑÑÑÑ Ð² одно. ÐÑи ÑÑом огÑаниÑÐµÐ½Ð¸Ñ Ñо ÑвойÑÑвом NO INHERIT в ÑодиÑелÑÑкой ÑаблиÑе иÑклÑÑаÑÑÑÑ Ð¸Ð· ÑаÑÑмоÑÑениÑ. ÐамеÑÑÑе, ÑÑо безÑмÑнное огÑаниÑение CHECK в новой ÑаблиÑе никогда не ÑливаеÑÑÑ Ñ Ð´ÑÑгими, Ñак как Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ вÑегда вÑбиÑаеÑÑÑ ÑникалÑное имÑ.
ÐаÑамеÑÑÑ STORAGE Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ Ñак же копиÑÑÑÑÑÑ Ð¸Ð· ÑодиÑелÑÑÐºÐ¸Ñ ÑаблиÑ.
- LIKE иÑÑ Ð¾Ð´Ð½Ð°Ñ_ÑаблиÑа [ ваÑианÑ_копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ... ]
ÐÑедложение LIKE опÑеделÑÐµÑ ÑаблиÑÑ, из коÑоÑой в новÑÑ ÑаблиÑÑ Ð±ÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð²Ñе имена колонок, Ð¸Ñ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° NULL.
РоÑлиÑие Ð¾Ñ INHERITS, Ð½Ð¾Ð²Ð°Ñ Ð¸ иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑаблиÑа ÑÑановÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимÑми поÑле завеÑÑÐµÐ½Ð¸Ñ ÑозданиÑ. ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑаблиÑе не оÑÑажаÑÑÑÑ Ð² новой, а даннÑе новой ÑаблиÑÑ Ð½Ðµ вклÑÑаÑÑÑÑ Ð² ÑезÑлÑÑÐ°Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð¹.
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений по ÑмолÑÐ°Ð½Ð¸Ñ Ð² опÑеделениÑÑ ÐºÐ¾Ð¿Ð¸ÑÑемÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº пеÑеноÑÑÑÑÑ Ð² новÑÑ ÑаблиÑÑ, еÑли дополниÑелÑно Ñказано INCLUDING DEFAULTS. ÐÑли Ñакие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑзÑваÑÑ ÑÑнкÑиÑ, модиÑиÑиÑÑÑÑие ÐÐ, как напÑимеÑ,
nextval, пÑи ÑÑом ÑоздаÑÑÑÑ ÑвÑÐ·Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑаблиÑÑ Ñ Ð½Ð¾Ð²Ð¾Ð¹. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ñакие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ пеÑеноÑÑÑÑÑ, вÑледÑÑвие Ñего в новой ÑаблиÑе ÑкопиÑованнÑе колонки полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ NULL.ÐгÑаниÑÐµÐ½Ð¸Ñ NULL копиÑÑÑÑÑÑ Ð² новÑÑ ÑаблиÑÑ Ð²Ñегда, а огÑаниÑÐµÐ½Ð¸Ñ CHECK копиÑÑÑÑÑÑ ÑолÑко пÑи Ñвном Ñказании INCLUDING CONSTRAINTS. ÐндекÑÑ, ÑвойÑÑво PRIMARY KEY и огÑаниÑÐµÐ½Ð¸Ñ UNIQUE из иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑаблиÑÑ ÐºÐ¾Ð¿Ð¸ÑÑÑÑÑÑ Ð² новÑÑ, ÑолÑко еÑли Ñвно Ñказано INCLUDING INDEXES. ÐÑо в Ñавной меÑе каÑаеÑÑÑ ÐºÐ°Ðº огÑаниÑений ÑаблиÑ, Ñак и колонок.
ÐаÑамеÑÑÑ STORAGE бÑдÑÑ Ð¿ÐµÑенеÑÐµÐ½Ñ Ð² опÑеделение копиÑÑемÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, ÑолÑко еÑли Ñвно ÑказÑваеÑÑÑ INCLUDING STORAGE. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑÑ STORAGE иÑклÑÑаÑÑÑÑ, вÑледÑÑвие Ñего ÑкопиÑованнÑе колонки в новой ÑаблиÑе полÑÑаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, опÑеделÑннÑе ÑооÑвеÑÑÑвÑÑÑим Ñипом. ÐодÑобнее паÑамеÑÑÑ STORAGE опиÑÐ°Ð½Ñ Ð² Разделе 59.2.
ÐомменÑаÑии Ð´Ð»Ñ ÑкопиÑованнÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, огÑаниÑений и индекÑов бÑдÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑÑÑ, ÑолÑко еÑли Ñвно Ñказано INCLUDING COMMENTS. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑии иÑклÑÑаÑÑÑÑ, вÑледÑÑвие Ñего ÑкопиÑованнÑе колонки и огÑаниÑÐµÐ½Ð¸Ñ Ð² новой ÑаблиÑе оказÑваÑÑÑÑ Ð±ÐµÐ· комменÑаÑиев.
ÐÑедложение INCLUDING ALL ÑвлÑеÑÑÑ ÑокÑаÑÑнной ÑоÑмой ÑазвÑÑнÑÑого пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS.
ÐамеÑÑÑе Ñакже, ÑÑо в оÑлиÑие Ð¾Ñ INHERITS, колонки и огÑаниÑениÑ, копиÑÑемÑе командой LIKE не обÑединÑÑÑÑÑ Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑми колонками и огÑаниÑениÑми. ÐÑли дÑблиÑÑÑÑееÑÑ Ð¸Ð¼Ñ ÑказÑваеÑÑÑ Ñвно или Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð² дÑÑгом пÑедложении LIKE, пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка.
ÐÑедложение LIKE Ð¼Ð¾Ð¶ÐµÑ Ñакже пÑименÑÑÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº из пÑедÑÑавлений, ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑоÑÑавнÑÑ Ñипов. ÐепÑименимÑе паÑамеÑÑÑ (напÑимеÑ, INCLUDING INDEXES Ð´Ð»Ñ Ð¿ÑедÑÑавлениÑ) пÑи ÑÑом игноÑиÑÑÑÑÑÑ.
- CONSTRAINT имÑ_огÑаниÑениÑ
ÐеобÑзаÑелÑное Ð¸Ð¼Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ или огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ. ÐÑи наÑÑÑении огÑаниÑÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ Ð¸Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð² ÑообÑении об оÑÐ¸Ð±ÐºÐ°Ñ , Ñак ÑÑо имена огÑаниÑений вида колонка должна бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑной могÑÑ ÑообÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± огÑаниÑении клиенÑÑÐºÐ¾Ð¼Ñ Ð¿ÑиложениÑ. (Ðмена огÑаниÑений, вклÑÑаÑÑие пÑобелÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑаÑÑ Ð² двойнÑе кавÑÑки.) ÐÑли Ð¸Ð¼Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ðµ Ñказано, ÑиÑÑема генеÑиÑÑÐµÑ Ð¸Ð¼Ñ Ð°Ð²ÑомаÑиÑеÑки.
- NOT NULL
ÐÐ°Ð½Ð½Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ° не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL.
- NULL
ÐÐ°Ð½Ð½Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ° Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL (по ÑмолÑаниÑ).
ÐÑо пÑедложение пÑедназнаÑено ÑолÑко Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ Ð½ÐµÑÑандаÑÑнÑми базами даннÑÑ SQL. ÐÑполÑзоваÑÑ ÐµÐ³Ð¾ в новÑÑ Ð¿ÑиложениÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ.
- CHECK ( вÑÑажение ) [ NO INHERIT ]
РогÑаниÑении CHECK задаÑÑÑÑ Ð²ÑÑажение, возвÑаÑаÑÑее бÑлевÑкий ÑезÑлÑÑаÑ, по коÑоÑÐ¾Ð¼Ñ Ð¾Ð¿ÑеделÑеÑÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÑпеÑна опеÑаÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÑÑÑок. ÐпеÑаÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ ÑÑпеÑно, еÑли ÑезÑлÑÑÐ°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñавен TRUE или UNKNOWN. ÐÑли же Ð´Ð»Ñ ÐºÐ°ÐºÐ¾Ð¹-нибÑÐ´Ñ ÑÑÑоки, задейÑÑвованной в опеÑаÑии Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ изменениÑ, бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен ÑезÑлÑÑÐ°Ñ FALSE, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка, и ÑÑа опеÑаÑÐ¸Ñ Ð½Ðµ менÑÐµÑ Ð½Ð¸Ñего в базе даннÑÑ . ÐгÑаниÑение-пÑовеÑка, заданное как огÑаниÑение колонки, должно ÑÑÑлаÑÑÑÑ ÑолÑко на знаÑение Ñамой колонки, Ñогда как огÑаниÑение на ÑÑовне ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑÑлаÑÑÑÑ Ð¸ на неÑколÑко колонок.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ CHECK не могÑÑ ÑодеÑжаÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑÑ Ð¸Ð»Ð¸ ÑÑÑлаÑÑÑÑ Ð½Ð° пеÑеменнÑе, кÑоме как на колонки ÑекÑÑей ÑÑÑоки. Также допÑÑÑима ÑÑÑлка на ÑиÑÑемнÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ tableoid, но не на дÑÑгие ÑиÑÑемнÑе колонки.
ÐгÑаниÑение Ñ Ð¿Ð¾Ð¼ÐµÑкой NO INHERIT не бÑÐ´ÐµÑ Ð½Ð°ÑледоваÑÑÑÑ Ð´Ð¾ÑеÑними ÑаблиÑами.
- DEFAULT вÑÑажение_по_ÑмолÑаниÑ
ÐÑедложение DEFAULT задаÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, в опÑеделении коÑоÑой оно пÑиÑÑÑÑÑвÑеÑ. ÐнаÑение задаÑÑÑÑ Ð²ÑÑажением без пеÑеменнÑÑ (подзапÑоÑÑ Ð¸ пеÑекÑÑÑÑнÑе ÑÑÑлки на дÑÑгие колонки ÑекÑÑей ÑаблиÑÑ Ð² нÑм не допÑÑкаÑÑÑÑ). Тип даннÑÑ Ð²ÑÑажениÑ, задаÑÑего знаÑение по ÑмолÑаниÑ, должен ÑооÑвеÑÑÑвоваÑÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸.
ÐÑо вÑÑажение бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ð¾ вÑÐµÑ Ð¾Ð¿ÐµÑаÑиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , в коÑоÑÑÑ Ð½Ðµ задаÑÑÑÑ Ð·Ð½Ð°Ñение данной колонки. ÐÑли знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ опÑеделено, Ñаким знаÑением бÑÐ´ÐµÑ NULL.
- UNIQUE (огÑаниÑение колонки)
UNIQUE ( имÑ_колонки [, ... ] ) (огÑаниÑение ÑаблиÑÑ) ÐгÑаниÑение UNIQUE опÑеделÑеÑ, ÑÑо гÑÑппа из одной или неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑолÑко ÑникалÑнÑе знаÑениÑ. ÐгÑаниÑение ÑникалÑноÑÑи Ð´Ð»Ñ ÑаблиÑÑ Ð²ÐµÐ´ÑÑ ÑÐµÐ±Ñ ÑоÑно Ñак же, как огÑаниÑение Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, но Ð¼Ð¾Ð¶ÐµÑ Ð¾Ñ Ð²Ð°ÑÑваÑÑ Ð½ÐµÑколÑко колонок.
ÐÑи пÑовеÑке огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи знаÑÐµÐ½Ð¸Ñ NULL не ÑÑиÑаÑÑÑÑ ÑавнÑми.
Ркаждом огÑаниÑении ÑникалÑноÑÑи Ð´Ð»Ñ ÑаблиÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ задаваÑÑÑÑ Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, оÑлиÑнÑй Ð¾Ñ Ð½Ð°Ð±Ð¾Ñа лÑбого дÑÑгого огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи или пеÑвиÑного клÑÑа в данной ÑаблиÑе. (ÐнаÑе ÑÑо бÑÐ´ÐµÑ Ð¾Ð´Ð½Ð¾ и Ñо же огÑаниÑение, опÑеделÑнное многокÑаÑно.)
- PRIMARY KEY (огÑаниÑение колонки)
PRIMARY KEY ( имÑ_колонки [, ... ] ) (огÑаниÑение ÑаблиÑÑ) ÐгÑаниÑение пеÑвиÑного клÑÑа опÑеделÑеÑ, ÑÑо колонка или неÑколÑко колонок ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ ÑолÑко ÑникалÑнÑе (неповÑоÑÑÑÑиеÑÑ) знаÑÐµÐ½Ð¸Ñ Ð½Ðµ NULL. С ÑÐµÑ Ð½Ð¸ÑеÑкой ÑÑоÑÐ¾Ð½Ñ PRIMARY KEY пÑедÑÑавлÑÐµÑ Ñобой пÑоÑÑо ÑоÑеÑание огÑаниÑений UNIQUE и NOT NULL, но обÑÑвление пеÑвиÑного клÑÑа пÑивноÑÐ¸Ñ Ñакже меÑаданнÑе о конÑÑÑÑкÑии ÑÑ ÐµÐ¼Ñ, Ñак как пеÑвиÑнÑй клÑÑ Ð¿Ð¾Ð´ÑазÑмеваеÑ, ÑÑо дÑÑгие ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº как на ÑникалÑнÑй иденÑиÑикаÑÐ¾Ñ ÑÑÑок.
ÐÐ»Ñ ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ опÑеделиÑÑ ÑолÑко один пеÑвиÑнÑй клÑÑ, бÑÐ´Ñ Ñо огÑаниÑение Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ или Ð´Ð»Ñ ÑаблиÑÑ.
РопÑеделении пеÑвиÑного клÑÑа должен задаваÑÑÑÑ Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, оÑлиÑнÑй Ð¾Ñ Ð½Ð°Ð±Ð¾Ñа лÑбого дÑÑгого огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи, ÑÑÑановленного Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ.
- EXCLUDE [ USING меÑод_индекÑа ] ( ÑлеменÑ_иÑклÑÑÐµÐ½Ð¸Ñ WITH опеÑаÑÐ¾Ñ [, ... ] ) паÑамеÑÑÑ_индекÑа [ WHERE ( пÑÐµÐ´Ð¸ÐºÐ°Ñ ) ]
ÐÑедложение EXCLUDE опÑеделÑÐµÑ Ð¾Ð³ÑаниÑение-иÑклÑÑение, коÑоÑое гаÑанÑиÑÑеÑ, ÑÑо Ð´Ð»Ñ Ð»ÑбÑÑ Ð´Ð²ÑÑ ÑÑÑок, ÑÑавниваемÑÑ Ð¿Ð¾ ÑказаннÑм колонкам или вÑÑажениÑм Ñ ÑказаннÑми опеÑаÑоÑами, ÑезÑлÑÑÐ°Ñ Ð½Ðµ бÑÐ´ÐµÑ Ñавен TRUE Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑавнений. ÐÑли вÑе ÑказаннÑе опеÑаÑоÑÑ Ð¿ÑовеÑÑÑÑ ÑавенÑÑво, ÑÑо огÑаниÑение ÑавноÑилÑно огÑаниÑÐµÐ½Ð¸Ñ UNIQUE, Ñ Ð¾ÑÑ Ð¾Ð±ÑÑное огÑаниÑение ÑникалÑноÑÑи бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð±ÑÑÑÑее. С дÑÑгой ÑÑоÑонÑ, в огÑаниÑениÑÑ -иÑклÑÑениÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаваÑÑ Ð±Ð¾Ð»ÐµÐµ обÑие ÑÑловиÑ, Ñем пÑоÑÑое ÑÑловие на ÑавенÑÑво. ÐапÑимеÑ, можно задаÑÑ Ð¾Ð³ÑаниÑение, ÑÑебÑÑÑее, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ две ÑÑÑоки в ÑаблиÑе не ÑодеÑжали пеÑеÑекаÑÑÐ¸Ñ ÑÑ ÐºÑÑгов (Ñм. Раздел 8.8), пÑименив опеÑаÑÐ¾Ñ &&.
ÐгÑаниÑениÑ-иÑклÑÑÐµÐ½Ð¸Ñ ÑеализÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð½Ð´ÐµÐºÑов, Ñак ÑÑо каждÑй ÑказаннÑй в Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑвÑзан Ñ ÑооÑвеÑÑÑвÑÑÑим клаÑÑом опеÑаÑоÑов (Ñм. Раздел 11.9) Ð´Ð»Ñ Ð¼ÐµÑода_индекÑа. ÐÑоме Ñого, опеÑаÑоÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÐºÐ¾Ð¼Ð¼ÑÑаÑивнÑми. Ркаждом ÑлеменÑе_иÑклÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ дополниÑелÑно ÑказаÑÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑа и/или паÑамеÑÑÑ ÑоÑÑиÑовки, подÑобно опиÑаннÑе в CREATE INDEX.
ÐеÑод индекÑа должен поддеÑживаÑÑ amgettuple (Ñм. ÐÐ»Ð°Ð²Ñ 55); в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо ознаÑаеÑ, ÑÑо меÑод GIN здеÑÑ Ð¿ÑименÑÑÑ Ð½ÐµÐ»ÑзÑ. ХоÑÑ Ð² огÑаниÑении-иÑклÑÑении можно иÑполÑзоваÑÑ B-деÑевÑÑ Ð¸ Ñ ÐµÑ-индекÑÑ, в ÑÑом мало ÑмÑÑла, Ñак как Ñакой Ð¿Ð¾Ð´Ñ Ð¾Ð´ ниÑем не лÑÑÑе обÑÑного огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи. Так ÑÑо на пÑакÑике меÑодом индекÑа вÑегда бÑÐ´ÐµÑ GiST или SP-GiST.
ÐаÑамеÑÑ Ð¿ÑÐµÐ´Ð¸ÐºÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказаÑÑ Ð¾Ð³ÑаниÑение-иÑклÑÑение Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑва ÑаблиÑÑ; внÑÑÑи пÑи ÑÑом ÑоздаÑÑÑÑ ÑаÑÑиÑнÑй индекÑ. ÐамеÑÑÑе, ÑÑо пÑÐµÐ´Ð¸ÐºÐ°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑиÑÑ Ð² Ñкобки.
- REFERENCES внеÑнÑÑ_ÑаблиÑа [ ( внеÑнÑÑ_колонка ) ] [ MATCH Ñип_ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ] [ ON DELETE дейÑÑвие ] [ ON UPDATE дейÑÑвие ] (огÑаниÑение колонки)
FOREIGN KEY ( имÑ_колонки [, ... ] ) REFERENCES внеÑнÑÑ_ÑаблиÑа [ ( внеÑнÑÑ_колонка [, ... ] ) ] [ MATCH Ñип_ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ] [ ON DELETE дейÑÑвие ] [ ON UPDATE дейÑÑвие ] (огÑаниÑение ÑаблиÑÑ) ÐÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ Ð¾Ð³ÑаниÑение внеÑнего клÑÑа, ÑÑебÑÑÑее, ÑÑÐ¾Ð±Ñ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð³ÑÑппа из одной или неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº новой ÑаблиÑÑ ÑодеÑжала ÑолÑко Ñакие знаÑениÑ, коÑоÑÑм ÑооÑвеÑÑÑвÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² заданнÑÑ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ð½ÐµÐºÐ¾ÑоÑой ÑÑÑоки во внеÑней ÑаблиÑе. ÐÑли ÑпиÑок внеÑÐ½Ð¸Ñ _колонок опÑÑен, в каÑеÑÑве него иÑполÑзÑеÑÑÑ Ð¿ÐµÑвиÑнÑй клÑÑ Ð²Ð½ÐµÑней_ÑаблиÑÑ. РкаÑеÑÑве внеÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ неоÑкладÑваемого ÑникалÑного огÑаниÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ огÑаниÑение пеÑвиÑного клÑÑа во внеÑней ÑаблиÑе. ÐамеÑÑÑе, ÑÑо огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего клÑÑа, ÑвÑзÑваÑÑие вÑеменнÑе и поÑÑоÑннÑе ÑаблиÑÑ, опÑеделиÑÑ Ð½ÐµÐ»ÑзÑ.
ÐнаÑениÑ, вÑÑавлÑемÑе в ÑÑÑлаÑÑиеÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, ÑвеÑÑÑÑÑÑ Ñо знаÑениÑми во внеÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ð²Ð½ÐµÑней ÑаблиÑÑ Ñ ÑÑÑÑом заданного Ñипа ÑовпадениÑ. ÐÐ¾Ð·Ð¼Ð¾Ð¶Ð½Ñ ÑÑи Ñипа ÑовпадениÑ: MATCH FULL (полное Ñовпадение), MATCH PARTIAL (ÑаÑÑиÑное Ñовпадение) и Ñип по ÑмолÑаниÑ, MATCH SIMPLE (пÑоÑÑое Ñовпадение). С MATCH FULL ни одна из колонок многоколоноÑного внеÑнего клÑÑа не Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ NULL, кÑоме ÑлÑÑаÑ, когда вÑе внеÑние колонки NULL; в ÑÑом ÑлÑÑае, ÑÑÑока Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ имеÑÑ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð²Ð¾ внеÑней ÑаблиÑе. С MATCH SIMPLE лÑÐ±Ð°Ñ Ð¸Ð· колонок внеÑнего клÑÑа Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ NULL; пÑи ÑÑом ÑÑÑока Ñ NULL в одной из ÑÐ°ÐºÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ имеÑÑ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð²Ð¾ внеÑней ÑаблиÑе. Тип MATCH PARTIAL еÑÑ Ð½Ðµ Ñеализован. (РазÑмееÑÑÑ, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð¿ÑоÑÑ Ñо ÑÑавнением NULL не возникали, к колонкам, ÑÑÑлаÑÑимÑÑ Ð½Ð° внеÑние, можно пÑимениÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ NOT NULL.)
ÐÑоме Ñого, пÑи изменении знаÑений во внеÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ñ Ð´Ð°Ð½Ð½Ñми в ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ ÑÑой ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑоизводиÑÑÑÑ Ð¾Ð¿ÑеделÑннÑе дейÑÑвиÑ. ÐÑедложение ON DELETE задаÑÑ Ð´ÐµÐ¹ÑÑвие, пÑоизводимое пÑи Ñдалении некоÑоÑой ÑÑÑоки во внеÑней ÑаблиÑе. ÐÑедложение ON UPDATE подобнÑм обÑазом задаÑÑ Ð´ÐµÐ¹ÑÑвие, пÑоизводимое пÑи изменении знаÑÐµÐ½Ð¸Ñ Ð² ÑелевÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ð²Ð½ÐµÑней ÑаблиÑÑ. ÐÑли ÑÑÑока изменена, но ÑÑо изменение не заÑÑонÑло ÑелевÑе колонки, никакое дейÑÑвие не пÑоизводиÑÑÑ. СÑÑлоÑнÑе дейÑÑвиÑ, кÑоме NO ACTION, нелÑÐ·Ñ ÑделаÑÑ Ð¾ÑкладÑваемÑми, даже еÑли огÑаниÑение обÑÑвлено как оÑкладÑваемое. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе ÑледÑÑÑие ваÑианÑÑ Ð´ÐµÐ¹ÑÑвий:
- NO ACTION
ÐÑдаÑÑ Ð¾ÑибкÑ, показÑваÑÑÑÑ, ÑÑо пÑи Ñдалении или изменении запиÑи пÑоизойдÑÑ Ð½Ð°ÑÑÑение огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего клÑÑа. ÐÐ»Ñ Ð¾ÑложеннÑÑ Ð¾Ð³ÑаниÑений оÑибка пÑоизойдÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿ÑовеÑки огÑаниÑениÑ, еÑли ÑÑÑоки, ÑÑÑлаÑÑиеÑÑ Ð½Ð° ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ, по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð±ÑдÑÑ ÑÑÑеÑÑвоваÑÑ. ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ.
- RESTRICT
ÐÑдаÑÑ Ð¾ÑибкÑ, показÑваÑÑÑÑ, ÑÑо пÑи Ñдалении или изменении запиÑи пÑоизойдÑÑ Ð½Ð°ÑÑÑение огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего клÑÑа. ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¿Ð¾Ð´Ð¾Ð±ÐµÐ½ NO ACTION, но ÑÑа пÑовеÑка бÑÐ´ÐµÑ Ð½ÐµÐ¾ÑкладÑваемой.
- CASCADE
УдалиÑÑ Ð²Ñе ÑÑÑоки, ÑÑÑлаÑÑиеÑÑ Ð½Ð° ÑдалÑемÑÑ Ð·Ð°Ð¿Ð¸ÑÑ, либо поменÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² ÑÑÑлаÑÑÐ¸Ñ ÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ð½Ð° новÑе знаÑÐµÐ½Ð¸Ñ Ð²Ð¾ внеÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ , в ÑооÑвеÑÑÑвии Ñ Ð¾Ð¿ÐµÑаÑией.
- SET NULL
УÑÑановиÑÑ ÑÑÑлаÑÑиеÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ ÑавнÑми NULL.
- SET DEFAULT
УÑÑановиÑÑ Ð² ÑÑÑлаÑÑÐ¸Ñ ÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. (ÐÑли ÑÑи знаÑÐµÐ½Ð¸Ñ Ð½Ðµ ÑÐ°Ð²Ð½Ñ NULL, во внеÑней ÑаблиÑе должна бÑÑÑ ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð½Ð°Ð±Ð¾ÑÑ Ð·Ð½Ð°Ñений по ÑмолÑаниÑ; в пÑоÑивном ÑлÑÑае опеÑаÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð¾Ñибкой.)
ÐÑли внеÑние колонки менÑÑÑÑÑ ÑаÑÑо, бÑÐ´ÐµÑ ÑазÑмнÑм добавиÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ ÑÑÑлаÑÑÐ¸Ñ ÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, ÑÑÐ¾Ð±Ñ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¿Ð¾ обеÑпеÑÐµÐ½Ð¸Ñ ÑÑÑлоÑной ÑелоÑÑноÑÑи, ÑвÑзаннÑе Ñ Ð¾Ð³ÑаниÑением внеÑнего клÑÑа, вÑполнÑлиÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивно.
- DEFERRABLE
NOT DEFERRABLE ÐÑо пÑедложение опÑеделÑеÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ огÑаниÑение бÑÑÑ Ð¾ÑложеннÑм. ÐеоÑкладÑваемое огÑаниÑение бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ поÑле каждой командÑ. ÐÑовеÑка оÑкладÑваемÑÑ Ð¾Ð³ÑаниÑений Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñложена до завеÑÑÐµÐ½Ð¸Ñ ÑÑанзакÑии (обÑÑно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET CONSTRAINTS). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ NOT DEFERRABLE. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо пÑедложение пÑинимаÑÑ ÑолÑко огÑаниÑÐµÐ½Ð¸Ñ UNIQUE, PRIMARY KEY, EXCLUDE и REFERENCES (огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего клÑÑа). ÐгÑаниÑÐµÐ½Ð¸Ñ NOT NULL и CHECK не могÑÑ Ð±ÑÑÑ Ð¾ÑложеннÑми.
- INITIALLY IMMEDIATE
INITIALLY DEFERRED ÐÐ»Ñ Ð¾ÑкладÑваемÑÑ Ð¾Ð³ÑаниÑений ÑÑо пÑедложение опÑеделÑеÑ, когда огÑаниÑение должно пÑовеÑÑÑÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ÐгÑаниÑение Ñ Ñ Ð°ÑакÑеÑиÑÑикой INITIALLY IMMEDIATE (подÑазÑмеваемой по ÑмолÑаниÑ) пÑовеÑÑеÑÑÑ Ð¿Ð¾Ñле каждого опеÑаÑоÑа. ÐгÑаниÑение INITIALLY DEFERRED, напÑоÑив, пÑовеÑÑеÑÑÑ ÑолÑко в конÑе ÑÑанзакÑии. ÐÑÐµÐ¼Ñ Ð¿ÑовеÑки огÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ Ñвно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET CONSTRAINTS.
- WITH ( паÑамеÑÑ_Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ [= знаÑение] [, ... ] )
ÐÑо пÑедложение опÑеделÑÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑе паÑамеÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑаблиÑÑ Ð¸Ð»Ð¸ индекÑа (за подÑобнÑми ÑведениÑми о Ð½Ð¸Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº ÐаÑамеÑÑÑ Ñ ÑанениÑ. ÐÑедложение WITH Ð´Ð»Ñ ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ñакже вклÑÑаÑÑ Ñказание OIDS=TRUE (или пÑоÑÑо OIDS), ÑÑÑанавливаÑÑее, ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑÑока ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ ÑобÑÑвеннÑй OID (Object IDentifier, иденÑиÑикаÑÐ¾Ñ Ð¾Ð±ÑекÑа), или Ñказание OIDS=FALSE, ÑÑÑанавливаÑÑее, ÑÑо ÑÑÑоки не ÑодеÑÐ¶Ð°Ñ OID. ÐÑли Ñказание OIDS оÑÑÑÑÑÑвÑеÑ, знаÑение ÑÑого ÑвойÑÑва по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑионного паÑамеÑÑа default_with_oids. (ÐÑли Ð½Ð¾Ð²Ð°Ñ ÑаблиÑа ÑнаÑледована Ð¾Ñ ÐºÐ°ÐºÐ¸Ñ -либо ÑаблиÑ, имеÑÑÐ¸Ñ OID, ÑвойÑÑво OIDS=TRUE задаÑÑÑÑ Ð¿ÑинÑдиÑелÑно, даже еÑли в команде Ñвно напиÑано OIDS=FALSE.)
ÐÑли Ñвно Ñказано OIDS=FALSE или ÑÑо подÑазÑмеваеÑÑÑ, в новой ÑаблиÑе не бÑдÑÑ Ñ ÑаниÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ OID и новÑй OID не бÑÐ´ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ добавлÑемой в Ð½ÐµÑ ÑÑÑоки. ÐÐ»Ñ Ð¾Ð±ÑÑнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ñакое поведение пÑедпоÑÑиÑелÑнее, Ñак как оно ÑокÑаÑÐ°ÐµÑ Ð¿Ð¾ÑÑебление OID и Ñем ÑамÑм оÑкладÑÐ²Ð°ÐµÑ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ 32-биÑного ÑÑÑÑÑика OID. Ðак ÑолÑко пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ, знаÑÐµÐ½Ð¸Ñ OID болÑÑе нелÑÐ·Ñ ÑÑиÑаÑÑ ÑникалÑнÑми, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¸Ñ Ð·Ð½Ð°ÑиÑелÑно менее полезнÑми. Ð ÑÐ¾Ð¼Ñ Ð¶Ðµ, иÑклÑÑение колонки OID из ÑаблиÑÑ ÑокÑаÑÐ°ÐµÑ Ð¾Ð±ÑÑм, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñй Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑаблиÑÑ Ð½Ð° диÑке, на 4 байÑа Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки (на болÑÑинÑÑве плаÑÑоÑм), ÑÑо неÑколÑко ÑлÑÑÑÐ°ÐµÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ OID из ÑаблиÑÑ Ð¿Ð¾Ñле ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð¾ÑполÑзÑйÑеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER TABLE.
- WITH OIDS
WITHOUT OIDS ÐÑо ÑÑÑаÑевÑее напиÑание Ñказаний WITH (OIDS) и WITH (OIDS=FALSE), ÑооÑвеÑÑÑвенно. ÐÑли ÑÑебÑеÑÑÑ Ð¾Ð¿ÑеделиÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно ÑвойÑÑво OIDS и паÑамеÑÑÑ Ñ ÑанениÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ ÑинÑакÑÐ¸Ñ WITH ( ... ); Ñм. ниже.
- ON COMMIT
Ðоведением вÑеменнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð² конÑе блока ÑÑанзакÑии позволÑÐµÑ ÑпÑавлÑÑÑ Ð¿Ñедложение ON COMMIT, коÑоÑое пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑи паÑамеÑÑа:
- PRESERVE ROWS
Ðикакое ÑпеÑиалÑное дейÑÑвие в конÑе ÑÑанзакÑии не вÑполнÑеÑÑÑ. ÐÑо поведение по ÑмолÑаниÑ.
- DELETE ROWS
ÐÑе ÑÑÑоки в ÑÑой вÑеменной ÑаблиÑе бÑдÑÑ ÑдалÑÑÑÑÑ Ð² конÑе каждого блока ÑÑанзакÑии. Ðо ÑÑÑи, пÑи каждой ÑикÑаÑии ÑÑанзакÑии бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑÑÑ TRUNCATE.
- DROP
ÐÑа вÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑаблиÑа бÑÐ´ÐµÑ ÑдалÑÑÑÑÑ Ð² конÑе ÑекÑÑего блока ÑÑанзакÑии.
- TABLESPACE Ñабл_пÑоÑÑÑанÑÑво
ÐдеÑÑ Ñабл_пÑоÑÑÑанÑÑво â Ð¸Ð¼Ñ ÑаблиÑного пÑоÑÑÑанÑÑва, в коÑоÑом бÑÐ´ÐµÑ ÑоздаваÑÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑаблиÑа. ÐÑли оно не Ñказано, вÑбиÑаеÑÑÑ default_tablespace или temp_tablespaces, еÑли ÑаблиÑа вÑеменнаÑ.
- USING INDEX TABLESPACE Ñабл_пÑоÑÑÑанÑÑво
ÐÑо пÑедложение позволÑÐµÑ Ð²ÑбÑаÑÑ ÑаблиÑное пÑоÑÑÑанÑÑво, в коÑоÑом бÑдÑÑ ÑоздаваÑÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ, ÑвÑзаннÑе Ñ Ð¾Ð³ÑаниÑениÑми UNIQUE, PRIMARY KEY или EXCLUDE. ÐÑли оно не Ñказано, вÑбиÑаеÑÑÑ default_tablespace или temp_tablespaces, еÑли ÑаблиÑа вÑеменнаÑ.
ÐаÑамеÑÑÑ Ñ ÑанениÑ
ÐÑедложение WITH позволÑÐµÑ ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ индекÑов, ÑвÑзаннÑÑ Ñ Ð¾Ð³ÑаниÑениÑми UNIQUE, PRIMARY KEY и EXCLUDE. ÐаÑамеÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов докÑменÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² CREATE INDEX. ÐоддеÑживаемÑе в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð°ÑамеÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ паÑамеÑÑа, еÑли не Ñказано дÑÑгое, ÑÑÑеÑÑвÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй паÑамеÑÑ Ñ Ñем же именем и пÑеÑикÑом toast., коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑпÑавлÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ вÑоÑиÑной ÑаблиÑей TOAST, еÑли она еÑÑÑ (за дополниÑелÑнÑми ÑведениÑми о TOAST обÑаÑиÑеÑÑ Ðº Ð Ð°Ð·Ð´ÐµÐ»Ñ 59.2). УÑÑиÑе, ÑÑо ÑаблиÑа TOAST наÑледÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов autovacuum_* Ð¾Ñ ÑодиÑелÑÑкого оÑноÑениÑ, еÑли паÑамеÑÑÑ toast.autovacuum_* не опÑеделенÑ.
- fillfactor (integer)
ФакÑÐ¾Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑаблиÑÑ, задаваемÑй в пÑоÑенÑÐ°Ñ , Ð¾Ñ 10 до 100. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 100 (плоÑное заполнение). ÐÑи менÑÑем ÑакÑоÑе Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии INSERT ÑпаковÑваÑÑ Ð´Ð°Ð½Ð½Ñе в ÑÑÑаниÑÑ ÑолÑко до заданного пÑоÑенÑа; оÑÑавÑееÑÑ Ð¼ÐµÑÑо ÑезеÑвиÑÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑок на ÑÑой ÑÑÑаниÑе. Ð ÑезÑлÑÑаÑе UPDATE полÑÑÐ°ÐµÑ ÑÐ°Ð½Ñ Ð¿Ð¾Ð¼ÐµÑÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑннÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑÑÑоки в ÑÑ Ð¶Ðµ ÑÑÑаниÑÑ, ÑÑо и иÑÑ Ð¾Ð´Ð½ÑÑ, ÑÑо гоÑаздо ÑÑÑекÑивнее, Ñем ÑазмеÑаÑÑ ÐµÑ Ð½Ð° дÑÑгой ÑÑÑаниÑе. ÐÐ»Ñ ÑаблиÑ, запиÑи в коÑоÑÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не менÑÑÑÑÑ, лÑÑÑим вÑбоÑом бÑÐ´ÐµÑ Ð¿Ð»Ð¾Ñное заполнение, но Ð´Ð»Ñ Ð°ÐºÑивно изменÑемÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð»ÑÑÑе вÑбÑаÑÑ Ð¼ÐµÐ½ÑÑий ÑакÑÐ¾Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð·Ð°Ð´Ð°ÑÑ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ TOAST.
- autovacuum_enabled, toast.autovacuum_enabled (boolean)
ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ авÑооÑиÑÑки Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑной ÑаблиÑÑ. ÐÑи знаÑении true демон авÑооÑиÑÑки бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ VACUUM Ð´Ð»Ñ ÑÑой ÑаблиÑÑ, когда ÑиÑло изменÑннÑÑ Ð¸Ð»Ð¸ ÑдалÑннÑÑ ÐºÐ¾ÑÑежей пÑевÑÑÐ¸Ñ autovacuum_vacuum_threshold плÑÑ autovacuum_vacuum_scale_factor, помноженнÑй на пÑимеÑно оÑениваемое ÑиÑло акÑÑалÑнÑÑ ÐºÐ¾ÑÑежей в оÑноÑении. ÐодобнÑм обÑазом, пÑи вклÑÑÑнной авÑооÑиÑÑке бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ANALYZE, когда ÑиÑло добавленнÑÑ , изменÑннÑÑ Ð¸Ð»Ð¸ ÑдалÑннÑÑ ÐºÐ¾ÑÑежей пÑевÑÑÐ°ÐµÑ autovacuum_analyze_threshold плÑÑ autovacuum_analyze_scale_factor, помноженнÑй на пÑимеÑно оÑениваемое ÑиÑло акÑÑалÑнÑÑ ÐºÐ¾ÑÑежей в оÑноÑении. ÐÑи знаÑении false ÑÑа ÑаблиÑа не бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°ÑÑ Ð°Ð²ÑооÑиÑÑке, за иÑклÑÑением ÑлÑÑаев, когда авÑооÑиÑÑка поÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ иденÑиÑикаÑоÑов ÑÑанзакÑий. ÐодÑобнее о пÑедоÑвÑаÑении наложений ÑÑанзакÑий можно ÑзнаÑÑ Ð² ÐодÑазделе 23.1.5. ÐамеÑÑÑе, ÑÑо ÑÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°ÑледÑÐµÑ ÑÐ²Ð¾Ñ Ð·Ð½Ð°Ñение Ð¾Ñ Ð¿Ð°ÑамеÑÑа autovacuum.
- autovacuum_vacuum_threshold, toast.autovacuum_vacuum_threshold (integer)
ÐинималÑное ÑиÑло изменÑннÑÑ Ð¸Ð»Ð¸ ÑдалÑннÑÑ ÐºÐ¾ÑÑежей, пÑи коÑоÑом бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ VACUUM Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ.
- autovacuum_vacuum_scale_factor, toast.autovacuum_vacuum_scale_factor (float4)
ÐножиÑÐµÐ»Ñ Ð´Ð»Ñ reltuples (пÑоизведение ÑкладÑваеÑÑÑ Ñ autovacuum_vacuum_threshold).
- autovacuum_analyze_threshold (integer)
ÐинималÑное ÑиÑло добавленнÑÑ , изменÑннÑÑ Ð¸Ð»Ð¸ ÑдалÑннÑÑ ÐºÐ¾ÑÑежей, пÑи коÑоÑом бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ANALYZE Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ.
- autovacuum_analyze_scale_factor (float4)
ÐножиÑÐµÐ»Ñ Ð´Ð»Ñ reltuples (пÑоизведение ÑкладÑваеÑÑÑ Ñ autovacuum_analyze_threshold).
- autovacuum_vacuum_cost_delay, toast.autovacuum_vacuum_cost_delay (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ autovacuum_vacuum_cost_delay.
- autovacuum_vacuum_cost_limit, toast.autovacuum_vacuum_cost_limit (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ autovacuum_vacuum_cost_limit.
- autovacuum_freeze_min_age, toast.autovacuum_freeze_min_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ vacuum_freeze_min_age. УÑÑиÑе, ÑÑо ÑиÑÑема авÑооÑиÑÑки бÑÐ´ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ Ð¿Ð¾Ð¿ÑÑки ÑÑÑановиÑÑ Ð´Ð»Ñ ÑаблиÑÑ Ð·Ð½Ð°Ñение autovacuum_freeze_min_age, пÑевÑÑаÑÑее Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ ÑиÑÑемного autovacuum_freeze_max_age.
- autovacuum_freeze_max_age, toast.autovacuum_freeze_max_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ autovacuum_freeze_max_age. ÐамеÑÑÑе, ÑÑо ÑиÑÑема авÑооÑиÑÑки бÑÐ´ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ Ð¿Ð¾Ð¿ÑÑки ÑÑÑановиÑÑ Ð´Ð»Ñ ÑаблиÑÑ Ð·Ð½Ð°Ñение autovacuum_freeze_max_age, пÑевÑÑаÑÑее ÑиÑÑемное (оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко менÑÑе). Ð Ñ Ð¾ÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ð´Ð»Ñ autovacuum_freeze_max_age оÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкое знаÑение, даже 0, обÑÑно ÑÑо неÑазÑмно, Ñак как повлеÑÑÑ Ð·Ð° Ñобой ÑлиÑком ÑаÑÑÑÑ Ð¾ÑиÑÑкÑ.
- autovacuum_freeze_table_age, toast.autovacuum_freeze_table_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ vacuum_freeze_table_age.
- autovacuum_multixact_freeze_min_age, toast.autovacuum_multixact_freeze_min_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ vacuum_multixact_freeze_min_age. УÑÑиÑе, ÑÑо ÑиÑÑема авÑооÑиÑÑки бÑÐ´ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ Ð¿Ð¾Ð¿ÑÑки ÑÑÑановиÑÑ Ð´Ð»Ñ ÑаблиÑÑ Ð·Ð½Ð°Ñение autovacuum_multixact_freeze_min_age, пÑевÑÑаÑÑее Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ ÑиÑÑемного autovacuum_multixact_freeze_max_age.
- autovacuum_multixact_freeze_max_age, toast.autovacuum_multixact_freeze_max_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ autovacuum_multixact_freeze_max_age. УÑÑиÑе, ÑÑо ÑиÑÑема авÑооÑиÑÑки бÑÐ´ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ Ð¿Ð¾Ð¿ÑÑки ÑÑÑановиÑÑ Ð´Ð»Ñ ÑаблиÑÑ Ð·Ð½Ð°Ñение autovacuum_multixact_freeze_max_age, пÑевÑÑаÑÑее ÑиÑÑемное (оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко менÑÑе). Ð Ñ Ð¾ÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ð´Ð»Ñ autovacuum_multixact_freeze_max_age оÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкое знаÑение, даже 0, обÑÑно ÑÑо неÑазÑмно, Ñак как повлеÑÑÑ Ð·Ð° Ñобой ÑлиÑком ÑаÑÑÑÑ Ð¾ÑиÑÑкÑ.
- autovacuum_multixact_freeze_table_age, toast.autovacuum_multixact_freeze_table_age (integer)
ÐолÑзоваÑелÑÑкий паÑамеÑÑ vacuum_multixact_freeze_table_age.
- user_catalog_table (boolean)
ÐбÑÑвиÑÑ ÑаблиÑÑ ÐºÐ°Ðº дополниÑелÑнÑÑ ÑаблиÑÑ ÐºÐ°Ñалога, напÑимеÑ, Ð´Ð»Ñ Ñелей логиÑеÑкой ÑепликаÑии. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑÐ°Ð·Ð´ÐµÐ»Ñ 46.6.2.
ÐамеÑаниÑ
ÐÑименÑÑÑ OID в новÑÑ Ð¿ÑиложениÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ: по возможноÑÑи лÑÑÑе иÑполÑзоваÑÑ Ð² каÑеÑÑве пеÑвиÑного клÑÑа ÑаблиÑÑ SERIAL или дÑÑгой генеÑаÑÐ¾Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи. Ðднако, еÑли в ваÑем пÑиложении Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии ÑÑÑок пÑименÑеÑÑÑ OID, ÑекомендÑеÑÑÑ ÑоздаÑÑ ÑникалÑное огÑаниÑение по колонке oid в ÑÑой ÑаблиÑе, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ OID в ÑÑой ÑаблиÑе на Ñамом деле однознаÑно иденÑиÑиÑиÑовали ÑÑÑоки даже поÑле заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ ÑÑÑÑÑика. Также не ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑ, ÑÑо знаÑÐµÐ½Ð¸Ñ OID ÑникалÑÐ½Ñ Ð² ÑазнÑÑ ÑаблиÑÐ°Ñ ; еÑли вам ÑÑебÑеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑ, ÑникалÑнÑй в базе даннÑÑ , воÑполÑзÑйÑеÑÑ Ð´Ð»Ñ ÑÑого комбинаÑией tableoid и OID ÑÑÑоки.
ÐодÑказка: ÐÑименÑÑÑ OIDS=FALSE не ÑекомендÑеÑÑÑ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð±ÐµÐ· пеÑвиÑного клÑÑа, Ñак как без OID или ÑникалÑного клÑÑа даннÑÑ Ñложно иденÑиÑиÑиÑоваÑÑ Ð¾Ð¿ÑеделÑннÑе ÑÑÑоки.
PostgreSQL авÑомаÑиÑеÑки ÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑ, гаÑанÑиÑÑÑÑий ÑникалÑноÑÑÑ, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи и огÑаниÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвиÑного клÑÑа. ÐоÑÑÐ¾Ð¼Ñ Ñвно ÑоздаваÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº пеÑвиÑного клÑÑа не ÑÑебÑеÑÑÑ. (Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº CREATE INDEX.)
ÐгÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи и пеÑвиÑнÑе клÑÑи в ÑекÑÑей ÑеализаÑии не наÑледÑÑÑÑÑ. ÐÑледÑÑвие ÑÑого огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи доволÑно Ð¿Ð»Ð¾Ñ Ð¾ ÑоÑеÑаÑÑÑÑ Ñ Ð½Ð°Ñледованием.
Ð ÑаблиÑе не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÑÑе 1600 колонок. (Ðа пÑакÑике ÑакÑиÑеÑкий пÑедел обÑÑно ниже из-за огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° Ð´Ð»Ð¸Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи.)
ÐÑимеÑÑ
Создание ÑаблиÑÑ films и ÑаблиÑÑ distributors:
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) NOT NULL CHECK (name <> '')
);Создание ÑаблиÑÑ Ñ Ð´Ð²ÑмеÑнÑм маÑÑивом:
CREATE TABLE array_int (
vector int[][]
);ÐпÑеделение огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи Ð´Ð»Ñ ÑаблиÑÑ films. ÐгÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи могÑÑ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº ÑаблиÑÑ:
CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT production UNIQUE(date_prod)
);ÐпÑеделение огÑаниÑениÑ-пÑовеÑки Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸:
CREATE TABLE distributors (
did integer CHECK (did > 100),
name varchar(40)
);ÐпÑеделение огÑаниÑениÑ-пÑовеÑки Ð´Ð»Ñ ÑаблиÑÑ:
CREATE TABLE distributors (
did integer,
name varchar(40)
CONSTRAINT con1 CHECK (did > 100 AND name <> '')
);ÐпÑеделение огÑаниÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвиÑного клÑÑа Ð´Ð»Ñ ÑаблиÑÑ films:
CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT code_title PRIMARY KEY(code,title)
);ÐпÑеделение огÑаниÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвиÑного клÑÑа Ð´Ð»Ñ ÑаблиÑÑ distributors. СледÑÑÑие два пÑимеÑа ÑавнознаÑнÑ, но в пеÑвом иÑполÑзÑеÑÑÑ ÑинÑакÑÐ¸Ñ Ð¾Ð³ÑаниÑений Ð´Ð»Ñ ÑаблиÑÑ, а во вÑоÑом â Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸:
CREATE TABLE distributors (
did integer,
name varchar(40),
PRIMARY KEY(did)
);
CREATE TABLE distributors (
did integer PRIMARY KEY,
name varchar(40)
);ÐпÑеделение знаÑений по ÑмолÑаниÑ: Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ name знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ ÑÑÑока, Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ did â ÑледÑÑÑее знаÑение обÑекÑа поÑледоваÑелÑноÑÑи, а Ð´Ð»Ñ modtime â вÑемÑ, когда бÑла вÑÑавлена запиÑÑ:
CREATE TABLE distributors (
name varchar(40) DEFAULT 'Luso Films',
did integer DEFAULT nextval('distributors_serial'),
modtime timestamp DEFAULT current_timestamp
);ÐпÑеделение двÑÑ
огÑаниÑений NOT NULL Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº ÑаблиÑÑ distributors, Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· коÑоÑÑÑ
даÑÑÑÑ Ñвное имÑ:
CREATE TABLE distributors (
did integer CONSTRAINT no_null NOT NULL,
name varchar(40) NOT NULL
);ÐпÑеделение огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ name:
CREATE TABLE distributors (
did integer,
name varchar(40) UNIQUE
);То же Ñамое ÑÑловие, но в виде огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ:
CREATE TABLE distributors (
did integer,
name varchar(40),
UNIQUE(name)
);Создание Ñакой же ÑаблиÑÑ Ñ ÑакÑоÑом Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ 70% Ð´Ð»Ñ ÑаблиÑÑ Ð¸ ÐµÑ ÑникалÑного индекÑа:
CREATE TABLE distributors (
did integer,
name varchar(40),
UNIQUE(name) WITH (fillfactor=70)
)
WITH (fillfactor=70);Создание ÑаблиÑÑ circles Ñ Ð¾Ð³ÑаниÑением-иÑклÑÑением, не допÑÑкаÑÑим пеÑеÑеÑÐµÐ½Ð¸Ñ Ð´Ð²ÑÑ ÐºÑÑгов:
CREATE TABLE circles (
c circle,
EXCLUDE USING gist (c WITH &&)
);Создание ÑаблиÑÑ cinemas в ÑаблиÑном пÑоÑÑÑанÑÑве diskvol1:
CREATE TABLE cinemas (
id serial,
name text,
location text
) TABLESPACE diskvol1;Создание ÑоÑÑавного Ñипа и ÑипизиÑованной ÑаблиÑÑ:
CREATE TYPE employee_type AS (name text, salary numeric);
CREATE TABLE employees OF employee_type (
PRIMARY KEY (name),
salary WITH OPTIONS DEFAULT 1000
);СовмеÑÑимоÑÑÑ
Ðоманда CREATE TABLE ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL, Ñ Ð¾Ð¿Ð¸ÑаннÑми ниже иÑклÑÑениÑми.
ÐÑеменнÑе ÑаблиÑÑ
ХоÑÑ ÑинÑакÑÐ¸Ñ CREATE TEMPORARY TABLE подобен аналогиÑÐ½Ð¾Ð¼Ñ Ð² ÑÑандаÑÑе SQL, ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ Ð´ÑÑгим. Ð ÑÑандаÑÑе вÑеменнÑе ÑаблиÑÑ Ð¾Ð¿ÑеделÑÑÑÑÑ ÑолÑко один Ñаз и ÑÑÑеÑÑвÑÑÑ (изнаÑалÑно пÑÑÑÑе) в каждом ÑеанÑе, в коÑоÑом они иÑполÑзÑÑÑÑÑ. PostgreSQL вмеÑÑо ÑÑого ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй ÑÐµÐ°Ð½Ñ Ð²ÑполнÑл ÑобÑÑвеннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE TEMPORARY TABLE Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ вÑеменной ÑаблиÑÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ. ÐÑо позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð² ÑазнÑÑ ÑеанÑÐ°Ñ ÑаблиÑÑ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми именами Ð´Ð»Ñ ÑазнÑÑ Ñелей, Ñогда как пÑи Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ, ÑегламенÑиÑованном ÑÑандаÑÑом, вÑе ÑкземплÑÑÑ Ð²Ñеменной ÑаблиÑÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ именем Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ ÑаблиÑнÑÑ ÑÑÑÑкÑÑÑÑ.
Ðоведение вÑеменнÑÑ ÑаблиÑ, опиÑанное в ÑÑандаÑÑе, в болÑÑинÑÑве ÑвоÑм игноÑиÑÑÑÑ Ð¸ дÑÑгие СУÐÐ, Ñак ÑÑо в ÑÑом оÑноÑении PostgreSQL ведÑÑ ÑÐµÐ±Ñ Ñак же, как и ÑÑд дÑÑÐ³Ð¸Ñ Ð¡Ð£ÐÐ.
Ð ÑÑандаÑÑе SQL Ñакже ÑазделÑÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе и локалÑнÑе вÑеменнÑе ÑаблиÑÑ â в локалÑной вÑеменной ÑаблиÑе ÑодеÑжиÑÑÑ Ð¾ÑделÑнÑй Ð½Ð°Ð±Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ модÑÐ»Ñ SQL в оÑделÑном ÑеанÑе, Ñ Ð¾ÑÑ ÐµÑ Ð¾Ð¿Ñеделение Ñак же ÑазделÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸. Так как в PostgreSQL модÑли SQL не поддеÑживаÑÑÑÑ, ÑÑо ÑазлиÑие в PostgreSQL не ÑÑÑеÑÑвÑеÑ.
СовмеÑÑимоÑÑи Ñади, PostgreSQL пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÐºÐ»ÑÑевÑе Ñлова GLOBAL и LOCAL в обÑÑвлении вÑеменной ÑаблиÑÑ, но в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¾Ð½Ð¸ никак не дейÑÑвÑÑÑ. ÐÑполÑзоваÑÑ Ð¸Ñ Ð½Ðµ ÑекомендÑеÑÑÑ, Ñак как в бÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ PostgreSQL Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑинÑÑа Ð¸Ñ Ð¸Ð½ÑеÑпÑеÑаÑиÑ, более Ð±Ð»Ð¸Ð·ÐºÐ°Ñ Ðº ÑÑандаÑÑÑ.
ÐÑедложение ON COMMIT Ð´Ð»Ñ Ð²ÑеменнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ñоже подобно опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² ÑÑандаÑÑе SQL, но еÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе оÑлиÑиÑ. ÐÑли пÑедложение ON COMMIT опÑÑено, в SQL подÑазÑмеваеÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ON COMMIT DELETE ROWS. Ðднако в PostgreSQL по ÑмолÑÐ°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ ON COMMIT PRESERVE ROWS. ÐаÑамеÑÑ ON COMMIT DROP в ÑÑандаÑÑе SQL оÑÑÑÑÑÑвÑеÑ.
ÐеоÑложеннÑе огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи
Ðогда огÑаниÑение UNIQUE или PRIMARY KEY не ÑвлÑеÑÑÑ Ð¾ÑложеннÑм, PostgreSQL пÑовеÑÑÐµÑ ÑникалÑноÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑоки. СÑандаÑÑ SQL говоÑиÑ, ÑÑо ÑникалÑноÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° обеÑпеÑиваÑÑÑÑ ÑолÑко в конÑе опеÑаÑоÑа; ÑÑо ÑазлиÑие пÑоÑвлÑеÑÑÑ, напÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð³Ð´Ð° одна команда изменÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво клÑÑевÑÑ Ð·Ð½Ð°Ñений. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ, оговоÑенное ÑÑандаÑÑом, обÑÑвиÑе огÑаниÑение как оÑкладÑваемое (DEFERRABLE), но не оÑложенное (Ñ. е., INITIALLY IMMEDIATE). УÑÑиÑе, ÑÑо ÑÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð½Ð°ÑиÑелÑно медленнее, Ñем Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ Ð¿ÑовеÑка огÑаниÑений.
ÐгÑаниÑениÑ-пÑовеÑки Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº
СÑандаÑÑ SQL говоÑиÑ, ÑÑо огÑаниÑение CHECK, опÑеделÑемое Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, Ð¼Ð¾Ð¶ÐµÑ ÑÑÑлаÑÑÑÑ ÑолÑко на колонкÑ, Ñ ÐºÐ¾ÑоÑой оно ÑвÑзано; ÑолÑко огÑаниÑÐµÐ½Ð¸Ñ CHECK Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¼Ð¾Ð³ÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° неÑколÑко колонок. Ð PostgreSQL ÑÑого огÑаниÑÐµÐ½Ð¸Ñ Ð½ÐµÑ; он воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð³ÑаниÑениÑ-пÑовеÑки Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº и ÑÐ°Ð±Ð»Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾.
ÐгÑаниÑение EXCLUDE
ÐгÑаниÑÐµÐ½Ð¸Ñ EXCLUDE ÑвлÑÑÑÑÑ ÑаÑÑиÑением PostgreSQL.
NULL "ÐгÑаниÑение"
"ÐгÑаниÑение" NULL (на Ñамом деле ÑÑо не огÑаниÑение) ÑвлÑеÑÑÑ ÑаÑÑиÑением PostgreSQL ÑÑандаÑÑа SQL, коÑоÑое Ñеализовано Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ Ð½ÐµÐºÐ¾ÑоÑÑми дÑÑгими СУÐÐ (и Ð´Ð»Ñ ÑиммеÑÑии Ñ Ð¾Ð³ÑаниÑением NOT NULL). Так как ÑÑо поведение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð»Ñбой колонки, его пÑиÑÑÑÑÑвие не неÑÑÑ ÑмÑÑловой нагÑÑзки.
ÐаÑледование
ÐножеÑÑвенное наÑледование поÑÑедÑÑвом INHERITS ÑвлÑеÑÑÑ ÑзÑковÑм ÑаÑÑиÑением PostgreSQL. SQL:1999 и более поздние ÑÑандаÑÑÑ Ð¾Ð¿ÑеделÑÑÑ ÐµÐ´Ð¸Ð½Ð¸Ñное наÑледование Ñ Ð´ÑÑгим ÑинÑакÑиÑом и ÑмÑÑлом. ÐаÑледование в ÑÑиле SQL:1999 пока еÑÑ Ð½Ðµ поддеÑживаеÑÑÑ Ð² PostgreSQL.
ТаблиÑÑ Ñ Ð½ÑлÑм колонок
PostgreSQL позволÑÐµÑ ÑоздаÑÑ ÑаблиÑÑ Ð±ÐµÐ· колонок (напÑимеÑ, CREATE TABLE foo();). ÐÑо ÑаÑÑиÑение ÑÑандаÑÑа SQL, коÑоÑÑй не допÑÑÐºÐ°ÐµÑ ÑаблиÑÑ Ñ Ð½ÑлÑм колонок. ТаблиÑÑ Ñ Ð½ÑлÑм колонок Ñами по Ñебе не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ, но еÑли Ð¸Ñ Ð·Ð°Ð¿ÑеÑиÑÑ, возникаÑÑ ÑÑÑаннÑе оÑобÑе ÑиÑÑаÑии Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER TABLE DROP COLUMN, Ñак ÑÑо лÑÑÑим ваÑианÑом кажеÑÑÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ ÑÑо ÑÑебование ÑÑандаÑÑа.
ÐÑедложение WITH
ÐÑедложение WITH ÑвлÑеÑÑÑ ÑаÑÑиÑением PostgreSQL; в ÑÑандаÑÑе ни паÑамеÑÑÑ Ñ ÑанениÑ, ни OID не оговаÑиваÑÑÑÑ.
ТаблиÑнÑе пÑоÑÑÑанÑÑва
ÐонÑепÑÐ¸Ñ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв в PostgreSQL оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе. Ðак ÑледÑÑвие, пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ TABLESPACE и USING INDEX TABLESPACE ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми.
ТипизиÑованнÑе ÑаблиÑÑ
ТипизиÑованнÑе ÑаблиÑÑ ÑеализÑÑÑ Ð¿Ð¾Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑÑандаÑÑа SQL. СоглаÑно ÑÑандаÑÑÑ, ÑипизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑаблиÑа ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, ÑооÑвеÑÑÑвÑÑÑие нижележаÑÐµÐ¼Ñ ÑоÑÑÐ°Ð²Ð½Ð¾Ð¼Ñ ÑипÑ, и еÑÑ Ð¾Ð´Ð½Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ, ÑÑÑлаÑÑÑÑÑÑ Ð½Ð° ÑебÑ. PostgreSQL не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑÑлаÑÑиеÑÑ Ð½Ð° ÑÐµÐ±Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ Ñвно, но ÑÐ¾Ñ Ð¶Ðµ ÑÑÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ, воÑполÑзовавÑиÑÑ OID.
| ÐÑед. | ÐаÑало | След. |
| CREATE SERVER | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | CREATE TABLE AS |