CREATE FOREIGN TABLE
CREATE FOREIGN TABLE â ÑоздаÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ
СинÑакÑиÑ
CREATE FOREIGN TABLE [ IF NOT EXISTS ]имÑ_ÑаблиÑÑ( [ {имÑ_ÑÑолбÑаÑип_даннÑÑ[ OPTIONS (паÑамеÑÑ'знаÑение' [, ... ] ) ] [ COLLATEпÑавило_ÑоÑÑиÑовки] [огÑаниÑение_ÑÑолбÑа[ ... ] ] |огÑаниÑение_ÑаблиÑÑ} [, ... ] ] ) [ INHERITS (ÑаблиÑа_ÑодиÑелÑ[, ... ] ) ] SERVERимÑ_ÑеÑвеÑа[ OPTIONS (паÑамеÑÑ'знаÑение' [, ... ] ) ] ÐдеÑÑогÑаниÑение_ÑÑолбÑа: [ CONSTRAINTимÑ_огÑаниÑениÑ] { NOT NULL | NULL | CHECK (вÑÑажение) [ NO INHERIT ] | DEFAULTвÑÑажение_по_ÑмолÑаниÑ} иогÑаниÑение_ÑаблиÑÑ: [ CONSTRAINTимÑ_огÑаниÑениÑ] CHECK (вÑÑажение) [ NO INHERIT ]
ÐпиÑание
CREATE FOREIGN TABLE ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ Ð² ÑекÑÑей базе даннÑÑ
. ÐладелÑÑем ÑаблиÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑполнивÑий ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.
ÐÑли Ñказано Ð¸Ð¼Ñ ÑÑ
ÐµÐ¼Ñ (напÑимеÑ, CREATE FOREIGN TABLE myschema.mytable ...), ÑаблиÑа бÑÐ´ÐµÑ Ñоздана в ÑÑой ÑÑ
еме. РпÑоÑивном ÑлÑÑае она ÑоздаÑÑÑÑ Ð² ÑекÑÑей ÑÑ
еме. ÐÐ¼Ñ ÑÑоÑонней ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑгиÑ
ÑÑоÑонниÑ
и обÑÑнÑÑ
ÑаблиÑ, поÑледоваÑелÑноÑÑей, индекÑов, пÑедÑÑавлений и маÑеÑиализованнÑÑ
пÑедÑÑавлений, ÑÑÑеÑÑвÑÑÑиÑ
в ÑÑой ÑÑ
еме.
CREATE FOREIGN TABLE Ñакже авÑомаÑиÑеÑки ÑоздаÑÑ ÑоÑÑавной Ñип даннÑÑ
, ÑооÑвеÑÑÑвÑÑÑий одной ÑÑÑоке ÑÑоÑонней ÑаблиÑÑ. Таким обÑазом, Ð¸Ð¼Ñ ÑÑоÑонней ÑаблиÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑовпадаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑÑÑеÑÑвÑÑÑего Ñипа в ÑÑой же ÑÑ
еме.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ, необÑ
одимо имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа, а Ñакже пÑаво USAGE Ð´Ð»Ñ Ð²ÑеÑ
Ñипов ÑÑолбÑов, ÑодеÑжаÑиÑ
ÑÑ Ð² ÑаблиÑе.
ÐаÑамеÑÑÑ
IF NOT EXISTSÐе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли оÑноÑение Ñ Ñаким именем Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание. ÐамеÑÑÑе, ÑÑо Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ гаÑанÑии, ÑÑо ÑÑÑеÑÑвÑÑÑее оÑноÑение как-Ñо ÑооÑноÑиÑÑÑ Ñ Ñем, коÑоÑое могло Ð±Ñ Ð±ÑÑÑ Ñоздано.
имÑ_ÑаблиÑÑÐÐ¼Ñ Ñоздаваемой ÑаблиÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
имÑ_ÑÑолбÑаÐÐ¼Ñ ÑÑолбÑа, Ñоздаваемого в новой ÑаблиÑе.
Ñип_даннÑÑТип даннÑÑ ÑÑолбÑа (Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¾Ð¿Ñеделение маÑÑива Ñ ÑÑим Ñипом). Ðа дополниÑелÑнÑми ÑведениÑми о ÑÐ¸Ð¿Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÑе поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Postgres Pro, обÑаÑиÑеÑÑ Ðº Ðлаве 8.
COLLATEпÑавило_ÑоÑÑиÑовкиÐÑедложение
COLLATEназнаÑÐ°ÐµÑ Ð¿Ñавило ÑоÑÑиÑовки Ð´Ð»Ñ ÑÑолбÑа (коÑоÑÑй должен имеÑÑ Ñип, поддеÑживаÑÑий ÑоÑÑиÑовкÑ). ÐÑли оно оÑÑÑÑÑÑвÑеÑ, иÑполÑзÑеÑÑÑ Ð¿Ñавило ÑоÑÑиÑовки по ÑмолÑаниÑ, ÑÑÑановленное Ð´Ð»Ñ Ñипа даннÑÑ ÑÑолбÑа.INHERITS (ÑаблиÑа_ÑодиÑелÑ[, ... ] )ÐеобÑзаÑелÑное пÑедложение
INHERITSопÑеделÑÐµÑ ÑпиÑок ÑаблиÑ, Ð¾Ñ ÐºÐ¾ÑоÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑÑоÑоннÑÑ ÑаблиÑа бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки наÑледоваÑÑ Ð²Ñе ÑÑолбÑÑ. РодиÑелÑÑкими ÑаблиÑами могÑÑ Ð±ÑÑÑ Ð¾Ð±ÑÑнÑе или ÑÑоÑонние ÑаблиÑÑ. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº опиÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð¹ ÑоÑÐ¼Ñ CREATE TABLE.CONSTRAINTимÑ_огÑаниÑениÑÐеобÑзаÑелÑное Ð¸Ð¼Ñ ÑÑолбÑа или огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ. ÐÑи наÑÑÑении огÑаниÑÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ Ð¸Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð² ÑообÑении об оÑÐ¸Ð±ÐºÐ°Ñ , Ñак ÑÑо имена огÑаниÑений вида
ÑÑÐ¾Ð»Ð±ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑммогÑÑ ÑообÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± огÑаниÑении клиенÑÑÐºÐ¾Ð¼Ñ Ð¿ÑиложениÑ. (Ðмена огÑаниÑений, вклÑÑаÑÑие пÑобелÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑаÑÑ Ð² двойнÑе кавÑÑки.) ÐÑли Ð¸Ð¼Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ðµ Ñказано, ÑиÑÑема генеÑиÑÑÐµÑ Ð¸Ð¼Ñ Ð°Ð²ÑомаÑиÑеÑки.NOT NULLÐаннÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL.
NULLÐаннÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL (по ÑмолÑаниÑ).
ÐÑо пÑедложение пÑедназнаÑено ÑолÑко Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ Ð½ÐµÑÑандаÑÑнÑми базами даннÑÑ SQL. ÐÑполÑзоваÑÑ ÐµÐ³Ð¾ в новÑÑ Ð¿ÑиложениÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ.
CHECK (вÑÑажение) [ NO INHERIT ]РогÑаниÑении
CHECKзадаÑÑÑÑ Ð²ÑÑажение, возвÑаÑаÑÑее бÑлевÑкий ÑезÑлÑÑаÑ, коÑоÑÐ¾Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑдовлеÑвоÑÑÑÑ Ð²Ñе ÑÑÑоки в ÑÑоÑонней ÑаблиÑе; Ñо еÑÑÑ ÑÑо вÑÑажение должно вÑдаваÑÑ TRUE или UNKNOWN, но никогда FALSE, Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÑок в ÑÑоÑонней ÑаблиÑе. ÐгÑаниÑение-пÑовеÑка, заданное как огÑаниÑение ÑÑолбÑа, должно ÑÑÑлаÑÑÑÑ ÑолÑко на знаÑение Ñамого ÑÑолбÑа, Ñогда как огÑаниÑение на ÑÑовне ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑÑлаÑÑÑÑ Ð¸ на неÑколÑко ÑÑолбÑов.РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²ÑÑажениÑ
CHECKне могÑÑ ÑодеÑжаÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑÑ Ð¸Ð»Ð¸ ÑÑÑлаÑÑÑÑ Ð½Ð° пеÑеменнÑе, кÑоме как на ÑÑолбÑÑ ÑекÑÑей ÑÑÑоки. Также допÑÑÑима ÑÑÑлка на ÑиÑÑемнÑй ÑÑолбеÑtableoid, но не на дÑÑгие ÑиÑÑемнÑе ÑÑолбÑÑ.ÐгÑаниÑение Ñ Ð¿Ð¾Ð¼ÐµÑкой
NO INHERITне бÑÐ´ÐµÑ Ð½Ð°ÑледоваÑÑÑÑ Ð´Ð¾ÑеÑними ÑаблиÑами.DEFAULTвÑÑажение_по_ÑмолÑаниÑÐÑедложение
DEFAULTзадаÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑолбÑа, в опÑеделении коÑоÑого оно пÑиÑÑÑÑÑвÑеÑ. ÐнаÑение задаÑÑÑÑ Ð²ÑÑажением без пеÑеменнÑÑ (подзапÑоÑÑ Ð¸ пеÑекÑÑÑÑнÑе ÑÑÑлки на дÑÑгие ÑÑолбÑÑ ÑекÑÑей ÑаблиÑÑ Ð² нÑм не допÑÑкаÑÑÑÑ). Тип даннÑÑ Ð²ÑÑажениÑ, задаÑÑего знаÑение по ÑмолÑаниÑ, должен ÑооÑвеÑÑÑвоваÑÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÑÑолбÑа.ÐÑо вÑÑажение бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ð¾ вÑÐµÑ Ð¾Ð¿ÐµÑаÑиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , в коÑоÑÑÑ Ð½Ðµ задаÑÑÑÑ Ð·Ð½Ð°Ñение данного ÑÑолбÑа. ÐÑли знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ опÑеделено, Ñаким знаÑением бÑÐ´ÐµÑ NULL.
имÑ_ÑеÑвеÑаÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑего ÑÑоÑоннего ÑеÑвеÑа, пÑедоÑÑавлÑÑÑего даннÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ. Ð Ñоздании ÑеÑвеÑа можно ÑзнаÑÑ Ð² CREATE SERVER.
OPTIONS (паÑамеÑÑ'знаÑение' [, ...] )ÐаÑамеÑÑÑ, ÑвÑзÑваемÑе Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑоÑонней ÑаблиÑей или одним из ÐµÑ ÑÑолбÑов. ÐопÑÑÑимÑе имена и знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ обÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ñвои; они конÑÑолиÑÑÑÑÑÑ ÑÑнкÑией пÑовеÑки, ÑвÑзанной Ñ ÑÑой обÑÑÑкой. Ðмена паÑамеÑÑов не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ (Ñ Ð¾ÑÑ Ð¿Ð°ÑамеÑÑ ÑаблиÑÑ Ð¸ паÑамеÑÑ ÑÑолбÑа вполне могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¾ имÑ).
ÐамеÑаниÑ
ÐгÑаниÑÐµÐ½Ð¸Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ (напÑимеÑ, CHECK и NOT NULL) не конÑÑолиÑÑÑÑÑÑ ÑдÑом ÑиÑÑÐµÐ¼Ñ Postgres Pro, как не пÑÑаÑÑÑÑ Ð¸Ñ
конÑÑолиÑоваÑÑ Ð¸ болÑÑинÑÑво обÑÑÑок ÑÑоÑонниÑ
даннÑÑ
; Ñо еÑÑÑ, ÑиÑÑема пÑоÑÑо пÑедполагаеÑ, ÑÑо огÑаниÑение вÑполнÑеÑÑÑ. ÐонÑÑолиÑоваÑÑ Ñакое огÑаниÑение не имело Ð±Ñ Ð±Ð¾Ð»ÑÑого ÑмÑÑла, Ñак как оно пÑименÑлоÑÑ Ð±Ñ ÑолÑко к ÑÑÑокам, добавлÑемÑм или изменÑемÑм ÑеÑез ÑÑоÑоннÑÑ ÑаблиÑÑ, но не к ÑÑÑокам, модиÑиÑиÑÑемÑм дÑÑгим пÑÑÑм, напÑимеÑ, непоÑÑедÑÑвенно на ÑдалÑнном ÑеÑвеÑе. ÐмеÑÑо ÑÑого, огÑаниÑение, ÑвÑзанное Ñо ÑÑоÑонней ÑаблиÑей, должно пÑедÑÑавлÑÑÑ Ð¾Ð³ÑаниÑение, вÑполнение коÑоÑого обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑдалÑннÑй ÑеÑвеÑ.
ÐекоÑоÑÑе ÑпеÑиализиÑованнÑе обÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑм ваÑианÑом обÑаÑÐµÐ½Ð¸Ñ Ðº доÑÑÑпнÑм ÑеÑез Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñм, и в ÑÑом ÑлÑÑае Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑмеÑÑно ÑеализоваÑÑ ÐºÐ¾Ð½ÑÑÐ¾Ð»Ñ Ð¾Ð³ÑаниÑений в Ñамой Ñакой обÑÑÑке. Ðо не ÑледÑÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑ, ÑÑо какаÑ-либо обÑÑÑка ведÑÑ ÑÐµÐ±Ñ Ñак, еÑли об ÑÑом не Ñказано Ñвно в ÐµÑ Ð´Ð¾ÐºÑменÑаÑии.
ХоÑÑ Postgres Pro не пÑÑаеÑÑÑ ÐºÐ¾Ð½ÑÑолиÑоваÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ, он полагаеÑ, ÑÑо они вÑполнÑÑÑÑÑ Ð´Ð»Ñ Ñелей опÑимизаÑии запÑоÑов. ÐÑли в ÑÑоÑонней ÑаблиÑе бÑдÑÑ Ð²Ð¸Ð´Ð½Ñ ÑÑÑоки, не ÑдовлеÑвоÑÑÑÑие обÑÑÐ²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ, запÑоÑÑ Ðº ÑÑой ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑдаваÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑе ÑезÑлÑÑаÑÑ. ÐÑвеÑÑÑвенноÑÑÑ Ð·Ð° ÑакÑиÑеÑкое вÑполнение ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð»ÐµÐ¶Ð¸Ñ Ð½Ð° полÑзоваÑеле.
ÐÑимеÑÑ
Создание ÑÑоÑонней ÑаблиÑÑ films, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпна ÑеÑез ÑеÑÐ²ÐµÑ film_server:
CREATE FOREIGN TABLE films (
code char(5) NOT NULL,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
)
SERVER film_server;СовмеÑÑимоÑÑÑ
Ðоманда CREATE FOREIGN TABLE в оÑновном ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL; однако, как и CREATE TABLE, она допÑÑÐºÐ°ÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ NULL и ÑÑоÑонние ÑаблиÑÑ Ñ Ð½ÑлÑм ÑÑолбÑов. ÐозможноÑÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑолбÑов Ñакже ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro. ÐаÑледование ÑаблиÑ, в ÑоÑме, опÑеделÑнной в Postgres Pro, ÑÑандаÑÑÑ Ð½Ðµ ÑооÑвеÑÑÑвÑеÑ.