F.62. postgres_fdw
- F.62.1. ÐаÑамеÑÑÑ Ð¾Ð±ÑÑÑки Ð´Ð»Ñ postgres_fdw
- F.62.2. ФÑнкÑии
- F.62.3. УпÑавление Ñоединением
- F.62.4. УпÑавление ÑÑанзакÑиÑми
- F.62.5. ÐпÑимизаÑÐ¸Ñ ÑдалÑннÑÑ Ð·Ð°Ð¿ÑоÑов
- F.62.6. ÐкÑÑжение ÑдалÑнного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов
- F.62.7. СовмеÑÑимоÑÑÑ Ñ ÑазнÑми веÑÑиÑми
- F.62.8. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии
- F.62.9. ÐÑимеÑÑ
- F.62.10. ÐвÑоÑ
- F.62.2. ФÑнкÑии
ÐодÑÐ»Ñ postgres_fdw пÑедоÑÑавлÑÐµÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
postgres_fdw, иÑполÑзÑÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ обÑаÑаÑÑÑÑ Ðº даннÑм, наÑ
одÑÑимÑÑ Ð½Ð° внеÑниÑ
ÑеÑвеÑаÑ
Postgres Pro.
ФÑнкÑионалÑноÑÑÑ ÑÑого модÑÐ»Ñ Ð²Ð¾ многом пеÑеÑекаеÑÑÑ Ñ ÑÑнкÑионалÑноÑÑÑÑ ÑÑаÑого модÑÐ»Ñ dblink. Ðднако postgres_fdw пÑедоÑÑавлÑÐµÑ Ð±Ð¾Ð»ÐµÐµ пÑозÑаÑнÑй и ÑÑандаÑÑизиÑованнÑй ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑдалÑннÑм ÑаблиÑам и во многиÑ
ÑлÑÑаÑÑ
даÑÑ Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑÑÑÑ Ðº обÑаÑÐµÐ½Ð¸Ñ Ðº ÑдалÑннÑм даннÑм ÑеÑез postgres_fdw:
УÑÑановиÑе ÑаÑÑиÑение
postgres_fdwÑ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE EXTENSION.СоздайÑе обÑÐµÐºÑ ÑÑоÑоннего ÑеÑвеÑа, иÑполÑзÑÑ CREATE SERVER, коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÑедÑÑавлÑÑÑ ÑдалÑннÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , к коÑоÑой Ð²Ñ Ñ Ð¾ÑиÑе подклÑÑаÑÑÑÑ. УкажиÑе ÑвойÑÑва подклÑÑениÑ, кÑоме
userиpassword, в паÑамеÑÑÐ°Ñ Ð¾Ð±ÑекÑа ÑеÑвеÑа.СоздайÑе ÑопоÑÑавление полÑзоваÑелей, иÑполÑзÑÑ CREATE USER MAPPING, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ полÑзоваÑÐµÐ»Ñ Ð±Ð°Ð·Ñ, коÑоÑÐ¾Ð¼Ñ Ð½Ñжен доÑÑÑп к ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ. УкажиÑе Ð¸Ð¼Ñ Ð¸ паÑÐ¾Ð»Ñ ÑдалÑнного полÑзоваÑÐµÐ»Ñ Ð² паÑамеÑÑаÑ
userиpasswordÑопоÑÑавлениÑ.СоздайÑе ÑÑоÑоннÑÑ ÑаблиÑÑ, иÑполÑзÑÑ CREATE FOREIGN TABLE или IMPORT FOREIGN SCHEMA, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑдалÑнной ÑаблиÑÑ, к коÑоÑой Ð²Ñ Ñ Ð¾ÑиÑе обÑаÑаÑÑÑÑ. СÑолбÑÑ ÑÑоÑонней ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ ÑÑолбÑам Ñелевой ÑдалÑнной ÑаблиÑÑ. Ðднако Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно имена ÑÐ°Ð±Ð»Ð¸Ñ Ð¸/или ÑÑолбÑов, оÑлиÑнÑе Ð¾Ñ ÑдалÑннÑÑ , еÑли ÑкажеÑе коÑÑекÑнÑе ÑдалÑннÑе имена в паÑамеÑÑÐ°Ñ Ð¾Ð±ÑекÑа ÑÑоÑонней ÑаблиÑÑ.
ÐоÑле ÑÑого Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº даннÑм, Ñ
ÑанÑÑимÑÑ Ð² нижележаÑей ÑдалÑнной ÑаблиÑе, вам нÑжно ÑолÑко вÑполнÑÑÑ SELECT. ÐÑ Ñакже можеÑе изменÑÑÑ Ð´Ð°Ð½Ð½Ñе в ÑдалÑнной ÑаблиÑе, вÑполнÑÑ INSERT, UPDATE, DELETE, COPY или TRUNCATE. (РазÑмееÑÑÑ, ÑдалÑннÑй полÑзоваÑелÑ, ÑказаннÑй в ÑопоÑÑавлении, должен имеÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑе пÑава Ð´Ð»Ñ ÑÑого.)
ÐбÑаÑиÑе внимание, ÑÑо в запÑоÑаÑ
на ÑÑение или изменение даннÑÑ
в ÑдалÑннÑÑ
ÑаблиÑаÑ
Ñказание ONLY в командаÑ
SELECT, UPDATE, DELETE и TRUNCATE не дейÑÑвÑеÑ.
ÐамеÑÑÑе, ÑÑо в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð² postgres_fdw не поддеÑживаÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ INSERT Ñ Ð¿Ñедложением ON CONFLICT DO UPDATE. Ðднако пÑедложение ON CONFLICT DO NOTHING поддеÑживаеÑÑÑ, пÑи оÑÑÑÑÑÑвии ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²ÑбоÑа ÑникалÑного индекÑа. ÐамеÑÑÑе Ñакже, ÑÑо postgres_fdw поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑемеÑение ÑÑÑок, вÑзванное командами UPDATE, вÑполнÑемÑми Ð´Ð»Ñ ÑекÑиониÑованнÑÑ
ÑаблиÑ. Ðднако в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ вÑполниÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ, пÑи коÑоÑом ÑдалÑÐ½Ð½Ð°Ñ ÑекÑиÑ, вÑбÑÐ°Ð½Ð½Ð°Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑемеÑаемой ÑÑÑоки, Ñакже ÑвлÑеÑÑÑ Ñелевой ÑекÑией Ð´Ð»Ñ UPDATE и должна модиÑиÑиÑоваÑÑÑÑ Ð² дÑÑгой ÑаÑÑи Ñой же командÑ.
ÐбÑÑно ÑекомендÑеÑÑÑ Ð¾Ð±ÑÑвлÑÑÑ ÑÑолбÑÑ ÑÑоÑонней ÑаблиÑÑ ÑоÑно Ñ Ñеми же Ñипами даннÑÑ
и пÑавилами ÑоÑÑиÑовки, еÑли они пÑименимÑ, как Ñ ÑелевÑÑ
ÑÑолбÑов ÑдалÑнной ÑаблиÑÑ. ХоÑÑ postgres_fdw в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно лоÑлен к пÑеобÑазованиÑм Ñипов даннÑÑ
пÑи необÑ
одимоÑÑи, но когда ÑÐ¸Ð¿Ñ Ð¸Ð»Ð¸ пÑавила ÑоÑÑиÑовки не ÑовпадаÑÑ, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñе ÑеманÑиÑеÑкие аномалии, вÑледÑÑвие Ñого, ÑÑо ÑдалÑннÑй ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð·Ð°Ð¿ÑоÑа не Ñак, как локалÑнÑй ÑеÑвеÑ.
ÐамеÑÑÑе, ÑÑо ÑÑоÑоннÑÑ ÑаблиÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлена Ñ Ð¼ÐµÐ½ÑÑим колиÑеÑÑвом или Ñ Ð´ÑÑгим поÑÑдком ÑÑолбÑов, Ñем в нижележаÑей ÑдалÑнной ÑаблиÑе. СопоÑÑавление ÑÑолбÑов ÑдалÑнной ÑаблиÑÑ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾ имени, а не по позиÑии.
F.62.1. ÐаÑамеÑÑÑ Ð¾Ð±ÑÑÑки Ð´Ð»Ñ postgres_fdw
F.62.1.1. ÐаÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
ÐÐ»Ñ ÑÑоÑоннего ÑеÑвеÑа, наÑÑÑаиваемого Ñ Ð¸ÑполÑзованием обÑÑÑки ÑÑоÑонниÑ
даннÑÑ
postgres_fdw, можно задаÑÑ Ñе же паÑамеÑÑÑ, ÑÑо пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ libpq в ÑÑÑокаÑ
подклÑÑениÑ, как опиÑано в ÐодÑазделе 36.1.2, за иÑклÑÑением ÑледÑÑÑиÑ
паÑамеÑÑов, коÑоÑÑе не допÑÑкаÑÑÑÑ Ð¸Ð»Ð¸ обÑабаÑÑваеÑÑÑ Ð¿Ð¾-дÑÑгомÑ:
user,passwordиsslpassword(Ð¸Ñ ÑледÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ð² ÑопоÑÑавлениÑÑ Ð¿Ð¾Ð»ÑзоваÑелей или в Ñайле опиÑÐ°Ð½Ð¸Ñ ÑлÑжб)client_encoding(авÑомаÑиÑеÑки пÑинимаеÑÑÑ Ñавной локалÑной кодиÑовке ÑеÑвеÑа)application_nameÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ ÐºÐ°Ðº паÑамеÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸/или знаÑение postgres_fdw.application_name. ÐÑли задаÑÑÑÑ Ð¸ Ñам, и Ñам,postgres_fdw.application_nameпеÑеопÑеделÑÐµÑ Ð·Ð½Ð°Ñение паÑамеÑÑа подклÑÑениÑ. РоÑлиÑие Ð¾Ñ libpq,postgres_fdwдопÑÑÐºÐ°ÐµÑ Ð¸ÑполÑзование ÑпеÑпоÑледоваÑелÑноÑÑей вapplication_name. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº postgres_fdw.application_name.fallback_application_name(вÑегдаpostgres_fdw)sslkeyиsslcertмогÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð² ÑвойÑÑÐ²Ð°Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸/или ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. ÐÑли они задаÑÑÑÑ Ð¸ Ñам, и Ñам, пÑиоÑиÑÐµÑ Ð¸Ð¼ÐµÐµÑ ÑвойÑÑво ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ.
СоздаваÑÑ Ð¸ изменÑÑÑ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей, ÑÑÑанавливаÑÑие паÑамеÑÑ sslcert или sslkey, могÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
ÐодклÑÑаÑÑÑÑ Ðº ÑÑоÑонним ÑеÑвеÑам без аÑÑенÑиÑикаÑии по паÑÐ¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели, поÑÑÐ¾Ð¼Ñ Ð² ÑопоÑÑавлениÑÑ
Ð´Ð»Ñ Ð¾Ð±ÑÑнÑÑ
полÑзоваÑелей вÑегда нÑжно задаваÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ (password).
СÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑклÑÑиÑÑ Ð¿ÑовеÑÐºÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð½Ð° ÑÑовне ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑÑÑановив паÑамеÑÑ password_required 'false', напÑимеÑ:
ALTER USER MAPPING FOR some_non_superuser SERVER loopback_nopw OPTIONS (ADD password_required 'false');
ЧÑÐ¾Ð±Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑеннÑе полÑзоваÑели не могли злоÑпоÑÑеблÑÑÑ Ð¿Ñавами полÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑÐ²ÐµÑ postgres, и повÑÑиÑÑ Ñвои пÑивилегии, изменÑÑÑ ÑÑо ÑвойÑÑво в ÑопоÑÑавлении полÑзоваÑÐµÐ»Ñ ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑ.
ÐозабоÑÑÑеÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑеÑез ÑÑÑановленное ÑопоÑÑавление полÑзоваÑÐµÐ»Ñ Ð½Ðµ мог подклÑÑиÑÑÑÑ Ðº дÑÑгой базе Ñ Ð¿Ñавами ÑÑпеÑполÑзоваÑелÑ, как в ÑлÑÑаÑÑ
CVE-2007-3278 и CVE-2007-6601. Ðе задавайÑе паÑамеÑÑ password_required=false Ð´Ð»Ñ Ñоли public. ÐомниÑе, ÑÑо ÑопоÑÑавлÑемÑй полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑзоваÑÑ Ð»ÑбÑе клиенÑÑкие ÑеÑÑиÑикаÑÑ, а Ñакже запиÑи в ÑайлаÑ
.pgpass, .pg_service.conf и Ñ. п. в домаÑнем каÑалоге ÑиÑÑемного полÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑÐ²ÐµÑ postgres. Ðни Ñакже могÑÑ Ð¸ÑполÑзоваÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð²ÐµÑиÑ, ÑÑÑановленнÑе Ñежимами аÑÑенÑиÑикаÑии, напÑÐ¸Ð¼ÐµÑ peer или ident.
F.62.1.2. ÐаÑамеÑÑÑ Ð¸Ð¼ÐµÐ½Ð¸ обÑекÑа
ÐÑи паÑамеÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ ÑпÑавлÑÑÑ Ñем, как на ÑдалÑннÑй ÑеÑÐ²ÐµÑ Postgres Pro бÑдÑÑ Ð¿ÐµÑедаваÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð°, ÑигÑÑиÑÑÑÑие в опеÑаÑоÑÐ°Ñ SQL. ÐаннÑе паÑамеÑÑÑ Ð½ÑжнÑ, когда ÑÑоÑоннÑÑ ÑаблиÑа ÑоздаÑÑÑÑ Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸, оÑлиÑнÑми Ð¾Ñ Ð¸Ð¼Ñн ÑдалÑнной ÑаблиÑÑ.
schema_name(string)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ, ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑÑой ÑаблиÑе на ÑдалÑнном ÑеÑвеÑе. ÐÑли даннÑй паÑамеÑÑ Ð¾Ð¿ÑÑкаеÑÑÑ, пÑименÑеÑÑÑ ÑÑ ÐµÐ¼Ð° ÑÑоÑонней ÑаблиÑÑ.
table_name(string)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ, ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÑаблиÑÑ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑÑой ÑаблиÑе на ÑдалÑнном ÑеÑвеÑе. ÐÑли даннÑй паÑамеÑÑ Ð¾Ð¿ÑÑкаеÑÑÑ, пÑименÑеÑÑÑ Ð¸Ð¼Ñ ÑÑоÑонней ÑаблиÑÑ.
column_name(string)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑолбÑа ÑÑоÑонней ÑаблиÑÑ, ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÑÑолбÑа Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑÑÐ¾Ð¼Ñ ÑÑолбÑÑ Ð½Ð° ÑдалÑнном ÑеÑвеÑе. ÐÑли даннÑй паÑамеÑÑ Ð¾Ð¿ÑÑкаеÑÑÑ, пÑименÑеÑÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ðµ Ð¸Ð¼Ñ ÑÑолбÑа.
F.62.1.3. ÐаÑамеÑÑÑ Ð¾Ñенки ÑÑоимоÑÑи
ÐодÑÐ»Ñ postgres_fdw полÑÑÐ°ÐµÑ ÑдалÑннÑе даннÑе, вÑполнÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½Ð° ÑдалÑннÑÑ
ÑеÑвеÑаÑ
, поÑÑÐ¾Ð¼Ñ Ð² идеале Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ ÑÑоимоÑÑÑ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑоÑонней ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑавнÑÑÑÑÑ ÑÑоимоÑÑи вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° ÑдалÑнном ÑеÑвеÑе плÑÑ Ð¸Ð·Ð´ÐµÑжки ÑеÑевого взаимодейÑÑвиÑ. СамÑй надÑжнÑй ÑпоÑоб полÑÑиÑÑ Ñакие оÑенки â ÑзнаÑÑ ÑÑоимоÑÑÑ Ñ ÑдалÑнного ÑеÑвеÑа и добавиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð½Ð°Ð´Ð±Ð°Ð²ÐºÑ â но Ð´Ð»Ñ Ð¿ÑоÑÑÑÑ
запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ²Ñгодно пеÑедаваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй запÑоÑ, ÑолÑко ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾ÑÐµÐ½ÐºÑ ÑÑоимоÑÑи. ÐоÑÑÐ¾Ð¼Ñ postgres_fdw пÑедоÑÑавлÑÐµÑ ÑледÑÑÑие паÑамеÑÑÑ, позволÑÑÑие ÑпÑавлÑÑÑ Ð²ÑÑиÑлением оÑенки ÑÑоимоÑÑи:
use_remote_estimate(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа, опÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwвÑполнÑÑÑ ÑдалÑнно командÑEXPLAINÐ´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ñенок ÑÑоимоÑÑи. ÐаÑамеÑÑ, заданнÑй Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ, пеÑеопÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑ ÑеÑвеÑа, но ÑолÑко Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âfalse(вÑкл.).fdw_startup_cost(floating point)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа, ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой, добавлÑемое к оÑенке ÑÑоимоÑÑи запÑÑка Ð´Ð»Ñ Ð»Ñбого ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑоÑонней ÑаблиÑÑ Ð½Ð° ÑÑом ÑеÑвеÑе. Ðн вÑÑÐ°Ð¶Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе издеÑжки на ÑÑÑановление подклÑÑениÑ, ÑÐ°Ð·Ð±Ð¾Ñ Ð¸ планиÑование запÑоÑа на ÑдалÑнной ÑÑоÑоне и Ñ. д. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
100.fdw_tuple_cost(floating point)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа, ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой, вÑÑажаÑÑее дополниÑелÑнÑÑ ÑÐµÐ½Ñ ÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ коÑÑежа из ÑÑоÑонней ÑаблиÑÑ Ð½Ð° ÑÑом ÑеÑвеÑе. ÐÑо ÑиÑло можно ÑвелиÑиÑÑ Ð¸Ð»Ð¸ ÑменÑÑиÑÑ, оÑÑÐ°Ð¶Ð°Ñ Ð¼ÐµÐ½ÑÑÑÑ Ð¸Ð»Ð¸ болÑÑÑÑ ÑакÑиÑеÑкÑÑ ÑкоÑоÑÑÑ ÑеÑевого взаимодейÑÑÐ²Ð¸Ñ Ñ ÑдалÑннÑм ÑеÑвеÑом. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
0.01.
Ðогда поведение use_remote_estimate вклÑÑено, postgres_fdw полÑÑÐ°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑок и оÑÐµÐ½ÐºÑ ÑÑоимоÑÑи Ñ ÑдалÑнного ÑеÑвеÑа, а заÑем добавлÑÐµÑ Ðº оÑенке ÑÑоимоÑÑи fdw_startup_cost и fdw_tuple_cost. Ðогда поведение use_remote_estimate оÑклÑÑено, postgres_fdw ÑаÑÑÑиÑÑÐ²Ð°ÐµÑ ÑиÑло ÑÑÑок и оÑÐµÐ½ÐºÑ ÑÑоимоÑÑи локалÑно, а заÑем Ñак же добавлÑÐµÑ Ðº ÑÑой оÑенке fdw_startup_cost и fdw_tuple_cost. ÐокалÑÐ½Ð°Ñ Ð¾Ñенка Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑной ÑолÑко пÑи ÑÑловии налиÑÐ¸Ñ Ð»Ð¾ÐºÐ°Ð»Ñной копии ÑÑаÑиÑÑики ÑдалÑннÑÑ
ÑаблиÑ. ÐбновиÑÑ ÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE; пÑи ÑÑом ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа бÑÐ´ÐµÑ Ð¿ÑоÑканиÑована, и по ÐµÑ ÑодеÑÐ¶Ð¸Ð¼Ð¾Ð¼Ñ Ð±ÑдÑÑ Ð²ÑÑиÑлена и ÑоÑ
Ñанена ÑÑаÑиÑÑика как Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ñной ÑаблиÑÑ. ÐокалÑное Ñ
Ñанение ÑÑаÑиÑÑики Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑокÑаÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð´ÐµÑжек планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑдалÑнной ÑаблиÑÑ â но еÑли ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа менÑеÑÑÑ ÑаÑÑо, локалÑÐ½Ð°Ñ ÑÑаÑиÑÑика бÑÐ´ÐµÑ Ð±ÑÑÑÑо ÑÑÑаÑеваÑÑ.
F.62.1.4. ÐаÑамеÑÑÑ ÑдалÑнного вÑполнениÑ
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ WHERE, ÑодеÑжаÑие вÑÑÑоеннÑе опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, обÑабаÑÑваÑÑÑÑ Ð½Ð° ÑдалÑнном ÑеÑвеÑе, а огÑаниÑениÑ, ÑодеÑжаÑие вÑÐ·Ð¾Ð²Ñ Ð½Ðµ вÑÑÑоеннÑÑ
ÑÑнкÑий, пÑовеÑÑÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно поÑле полÑÑÐµÐ½Ð¸Ñ ÑÑÑок. ÐÑли же ÑаÑÑиÑеннÑе ÑÑнкÑии доÑÑÑÐ¿Ð½Ñ Ð½Ð° ÑдалÑнном ÑеÑвеÑе и можно ÑаÑÑÑиÑÑваÑÑ, ÑÑо они дадÑÑ Ñе же ÑезÑлÑÑаÑÑ, ÑÑо и локалÑно, пÑоизводиÑелÑноÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑвелиÑиÑÑ, пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð¸ Ñакие пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE Ð´Ð»Ñ ÑдалÑнного вÑполнениÑ. ÐÑим поведением позволÑÐµÑ ÑпÑавлÑÑÑ ÑледÑÑÑий паÑамеÑÑ:
extensions(string)Ð ÑÑом паÑамеÑÑе задаÑÑÑÑ ÑпиÑок имÑн ÑаÑÑиÑений Postgres Pro ÑеÑез запÑÑÑÑ, коÑоÑÑе ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð¸ имеÑÑ ÑовмеÑÑимÑе веÑÑии и на локалÑном, и на ÑдалÑнном ÑеÑвеÑе. ÐÑноÑÑÑиеÑÑ Ðº пеÑеÑиÑленнÑм ÑаÑÑиÑениÑм и пÑи ÑÑом поÑÑоÑннÑе (immutable) ÑÑнкÑии и опеÑаÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÐµÑедаваÑÑÑÑ Ð½Ð° вÑполнение ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа, но не Ð´Ð»Ñ ÑаблиÑÑ.
ÐÑи иÑполÑзовании паÑамеÑÑа
extensionsполÑзоваÑÐµÐ»Ñ Ñам оÑвеÑÐ°ÐµÑ Ð·Ð° Ñо, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеÑиÑленнÑе ÑаÑÑиÑÐµÐ½Ð¸Ñ ÑÑÑеÑÑвовали и Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ бÑло одинаковÑм на локалÑном и ÑдалÑнном ÑеÑвеÑе. РпÑоÑивном ÑлÑÑае ÑдалÑннÑе запÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑдаваÑÑ Ð¾Ñибки или неожиданнÑе ÑезÑлÑÑаÑÑ.fetch_size(integer)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, ÑколÑко ÑÑÑок должна полÑÑаÑÑ
postgres_fdwв одной опеÑаÑии вÑбоÑки. Ðго можно задаÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ ÑÑоÑоннего ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â100ÑÑÑок.batch_size(integer)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, ÑколÑко ÑÑÑок должна вÑÑавлÑÑÑ
postgres_fdwв одной опеÑаÑии вÑÑавки. Ðго можно задаÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ ÑÑоÑоннего ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â1ÑÑÑока.ÐбÑаÑиÑе внимание, ÑÑо ÑакÑиÑеÑкое колиÑеÑÑво ÑÑÑок, вÑÑавлÑемÑÑ
postgres_fdwв одной поÑÑии, завиÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÑолбÑов и знаÑениÑbatch_size. ÐоÑÑÐ¸Ñ Ð¿ÐµÑедаÑÑÑÑ Ð² одном запÑоÑе, а пÑоÑокол libpq, иÑполÑзÑÑ ÐºÐ¾ÑоÑÑйpostgres_fdwподклÑÑаеÑÑÑ Ðº ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ, огÑаниÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво паÑамеÑÑов одного запÑоÑа ÑиÑлом 65535. Ðогда «ÑиÑло ÑÑолбÑов» *batch_sizeпÑевÑÑÐ°ÐµÑ ÑÑÐ¾Ñ Ð¿Ñедел, знаÑениеbatch_sizeкоÑÑекÑиÑÑеÑÑÑ Ð²Ð¾ избежание оÑибки.
F.62.1.5. ÐаÑамеÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонного вÑполнениÑ
ÐбÑÑÑка postgres_fdw поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð°ÑинÑ
Ñонное вÑполнение, когда Ð´Ð»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи неÑколÑко ÑаÑÑей Ñзла Append вÑполнÑÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно, а не поÑледоваÑелÑно. ÐÑинÑ
ÑоннÑм вÑполнением ÑпÑавлÑÐµÑ ÑледÑÑÑий паÑамеÑÑ:
async_capable(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwдопÑÑкаÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменное ÑканиÑование ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð´Ð»Ñ Ð°ÑÐ¸Ð½Ñ Ñонного вÑполнениÑ. Ðго можно задаÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа. ÐаÑамеÑÑ, опÑеделÑннÑй на ÑÑовне ÑаблиÑÑ, пеÑеопÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑ ÑÑÐ¾Ð²Ð½Ñ ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âfalse.ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑаемÑе Ñо ÑÑоÑоннего ÑеÑвеÑа даннÑе бÑли ÑоглаÑованнÑми,
postgres_fdwоÑкÑÑÐ²Ð°ÐµÑ ÑолÑко одно Ñоединение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑоÑоннего ÑеÑвеÑа и вÑполнÑÐµÑ Ð²Ñе запÑоÑÑ Ðº Ð½ÐµÐ¼Ñ Ð¿Ð¾ÑледоваÑелÑно, даже еÑли в запÑоÑе задейÑÑвÑÑÑÑÑ Ð½ÐµÑколÑко ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ (неÑколÑко подклÑÑений бÑÐ´ÐµÑ ÑÑÑановлено, ÑолÑко еÑли Ð´Ð»Ñ ÑÑÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ ÑазнÑе ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей). ÐоÑÑÐ¾Ð¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, ÑÑо пÑоизводиÑелÑноÑÑÑ ÑвелиÑиÑÑÑ, еÑли оÑклÑÑиÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ Ñем ÑамÑм иÑклÑÑиÑÑ Ð¸Ð·Ð´ÐµÑжки, ÑвÑзаннÑе Ñ Ð°ÑÐ¸Ð½Ñ ÑоннÑм вÑполнением запÑоÑов.ÐÑÐ¸Ð½Ñ Ñонное вÑполнение иÑполÑзÑеÑÑÑ, даже когда Ñзел
AppendÑодеÑÐ¶Ð¸Ñ ÐºÐ°Ðº подпланÑ, вÑполнÑемÑе ÑÐ¸Ð½Ñ Ñонно, Ñак и подпланÑ, вÑполнÑемÑе аÑÐ¸Ð½Ñ Ñонно. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ , еÑлиpostgres_fdwобÑабаÑÑÐ²Ð°ÐµÑ Ð°ÑÐ¸Ð½Ñ ÑоннÑе подпланÑ, коÑÑежи ÑÑÐ¸Ñ Ð¿Ð¾Ð´Ð¿Ð»Ð°Ð½Ð¾Ð² не возвÑаÑаÑÑÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ ÑÐ¸Ð½Ñ ÑоннÑй подплан не веÑнÑÑ Ð²Ñе коÑÑежи, поÑколÑÐºÑ ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ð¿Ð»Ð°Ð½ вÑполнÑеÑÑÑ, пока аÑÐ¸Ð½Ñ ÑоннÑе Ð¿Ð¾Ð´Ð¿Ð»Ð°Ð½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ ÑезÑлÑÑаÑов аÑÐ¸Ð½Ñ ÑоннÑÑ Ð·Ð°Ð¿ÑоÑов к ÑÑоÑонним ÑеÑвеÑам. Такое поведение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² бÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ .
F.62.1.6. ÐаÑамеÑÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми
Ðак опиÑано в Ñазделе «УпÑавление ÑÑанзакÑиÑми», Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми и подÑÑанзакÑиÑми postgres_fdw ÑоздаÑÑ ÑооÑвеÑÑÑвÑÑÑие ÑдалÑннÑе ÑÑанзакÑии и подÑÑанзакÑии. ÐÑли ÑекÑÑей локалÑной ÑÑанзакÑии ÑооÑвеÑÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑдалÑннÑÑ
ÑÑанзакÑий, по ÑмолÑÐ°Ð½Ð¸Ñ postgres_fdw ÑикÑиÑÑÐµÑ ÑÑи ÑдалÑннÑе ÑÑанзакÑии поÑледоваÑелÑно, когда ÑикÑиÑÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð°Ñ ÑÑанзакÑиÑ. УдалÑннÑе подÑÑанзакÑии postgres_fdw по ÑмолÑÐ°Ð½Ð¸Ñ ÑикÑиÑÑÐµÑ Ñак же поÑледоваÑелÑно. УÑкоÑиÑÑ ÑÑÑ Ð¿ÑоÑедÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑледÑÑÑий паÑамеÑÑ:
parallel_commit(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwпÑи ÑикÑиÑовании локалÑной ÑÑанзакÑии ÑикÑиÑоваÑÑ Ð²Ñе ÑооÑвеÑÑÑвÑÑÑие ей ÑдалÑннÑе ÑÑанзакÑии одновÑеменно. ÐейÑÑвие ÑÑого паÑамеÑÑа Ñакже ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° подÑÑанзакÑии. Ðго можно опÑеделиÑÑ ÑолÑко Ð´Ð»Ñ ÑдалÑнного ÑеÑвеÑа, а не на ÑÑовне ÑаблиÑÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âfalse.ÐÑли ÑекÑÑÐ°Ñ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑеÑвеÑов, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, ÑдалÑннÑе ÑÑанзакÑии на Ð½Ð¸Ñ ÑикÑиÑÑÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно, когда ÑикÑиÑÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð°Ñ ÑÑанзакÑиÑ.
ÐклÑÑение ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ³Ð°Ñивно повлиÑÑÑ Ð½Ð° пÑоизводиÑелÑноÑÑÑ ÑÑоÑоннего ÑеÑвеÑа Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑдалÑннÑÑ ÑÑанзакÑий пÑи ÑикÑаÑии локалÑной ÑÑанзакÑии.
F.62.1.7. ÐаÑамеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе ÑÑоÑонние ÑаблиÑÑ, доÑÑÑпнÑе ÑеÑез postgres_fdw, ÑÑиÑаÑÑÑÑ Ð´Ð¾Ð¿ÑÑкаÑÑими изменениÑ. ÐÑо можно пеÑеопÑеделиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑего паÑамеÑÑа:
updatable(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwдопÑÑкаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑÐ°Ñ Ð¿Ð¾ÑÑедÑÑвом командINSERT,UPDATEиDELETE. Ðго можно задаÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа. ÐаÑамеÑÑ, опÑеделÑннÑй на ÑÑовне ÑаблиÑÑ, пеÑеопÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑ ÑÑÐ¾Ð²Ð½Ñ ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âtrue(Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑазÑеÑенÑ).ÐонеÑно, еÑли ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа на Ñамом деле не допÑÑÐºÐ°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, вÑÑ Ñавно пÑоизойдÑÑ Ð¾Ñибка. ÐÑполÑзование ÑÑого паÑамеÑÑа пÑежде вÑего позволÑÐµÑ Ð²ÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð»Ð¾ÐºÐ°Ð»Ñно, не обÑаÑаÑÑÑ Ðº ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ. ÐамеÑÑÑе, однако, ÑÑо пÑедÑÑавление
information_schemaбÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ, ÑÑо опÑеделÑÐ½Ð½Ð°Ñ ÑÑоÑоннÑÑ ÑаблиÑаpostgres_fdwÑвлÑеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñемой (или неÑ), ÑоглаÑно знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ паÑамеÑÑа, не пÑовеÑÑÑ ÑÑо на ÑдалÑнном ÑеÑвеÑе.
F.62.1.8. ÐаÑамеÑÑÑ Ð¾Ð¿ÐµÑаÑии опÑÑÑоÑÐµÐ½Ð¸Ñ ÑаблиÑ
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе ÑÑоÑонние ÑаблиÑÑ, доÑÑÑпнÑе ÑеÑез postgres_fdw, ÑÑиÑаÑÑÑÑ Ð´Ð¾Ð¿ÑÑкаÑÑими опÑÑÑоÑение. ÐÑо можно пеÑеопÑеделиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑего паÑамеÑÑа:
truncatable(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwдопÑÑкаÑÑ Ð¾Ð¿ÑÑÑоÑение ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ð¾ÑÑедÑÑвом командÑTRUNCATE. Ðго можно задаÑÑ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа. ÐаÑамеÑÑ, опÑеделÑннÑй на ÑÑовне ÑаблиÑÑ, пеÑеопÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑ ÑÑÐ¾Ð²Ð½Ñ ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âtrue(опÑÑÑоÑение ÑазÑеÑено).ÐонеÑно, еÑли ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа на Ñамом деле не допÑÑÐºÐ°ÐµÑ Ð¾Ð¿ÑÑÑоÑение, вÑÑ Ñавно пÑоизойдÑÑ Ð¾Ñибка. ÐÑполÑзование ÑÑого паÑамеÑÑа пÑежде вÑего позволÑÐµÑ Ð²ÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð»Ð¾ÐºÐ°Ð»Ñно, не обÑаÑаÑÑÑ Ðº ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ.
F.62.1.9. ÐаÑамеÑÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑа
ÐбÑÑÑка postgres_fdw позволÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ñ Ð¿Ñименением ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ IMPORT FOREIGN SCHEMA. ÐÑа команда ÑоздаÑÑ Ð½Ð° локалÑном ÑеÑвеÑе опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑонниÑ
ÑаблиÑ, ÑооÑвеÑÑÑвÑÑÑие ÑаблиÑам или пÑедÑÑавлениÑм, ÑÑÑеÑÑвÑÑÑим на ÑдалÑнном ÑеÑвеÑе. ÐÑли импоÑÑиÑÑемÑе ÑдалÑннÑе ÑаблиÑÑ ÑодеÑÐ¶Ð°Ñ ÑÑолбÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
Ñипов даннÑÑ
, на локалÑном ÑеÑвеÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑимÑе ÑÐ¸Ð¿Ñ Ñ Ñеми же именами.
Ðоведение пÑоÑедÑÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑа можно наÑÑÑоиÑÑ ÑледÑÑÑими паÑамеÑÑами (задаваемÑми в команде IMPORT FOREIGN SCHEMA):
import_collate(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑанавливаеÑ, бÑдÑÑ Ð»Ð¸ в опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ, импоÑÑиÑÑемÑÑ Ñ Ð²Ð½ÐµÑнего ÑеÑвеÑа, вклÑÑаÑÑÑÑ Ñ Ð°ÑакÑеÑиÑÑики ÑÑолбÑов
COLLATE. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¸ вклÑÑаÑÑÑÑ. Ðам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¾ÑклÑÑиÑÑ ÐµÐ³Ð¾, еÑли на ÑдалÑнном ÑеÑвеÑе Ð½Ð°Ð±Ð¾Ñ Ð¸Ð¼Ñн пÑавил ÑоÑÑиÑовки оÑлиÑаеÑÑÑ Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»Ñного, ÑÑо ÑкоÑее вÑего бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¼ÐµÑÑо, еÑли ÑеÑвеÑÑ ÑабоÑаÑÑ Ð² ÑазнÑÑ Ð¾Ð¿ÐµÑаÑионнÑÑ ÑиÑÑÐµÐ¼Ð°Ñ . Тем не менее оÑклÑÑение ÑÑеваÑо Ñем, ÑÑо пÑавила ÑоÑÑиÑовки в ÑÑолбÑÐ°Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð½Ðµ ÑовпадÑÑ Ñ Ð¿Ñавилами Ð´Ð»Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑо пÑиведÑÑ Ðº аномалÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов.Ðаже когда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñавен
true, импоÑÑиÑоваÑÑ ÑÑолбÑÑ Ñ Ð¿Ñавилом ÑоÑÑиÑовки, вÑбиÑаемÑм на ÑдалÑнном ÑеÑвеÑе по ÑмолÑаниÑ, ÑиÑкованно. СÑолбÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑÑÑÑÑ Ñо ÑвойÑÑвомCOLLATE "default", а в ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ñавило ÑоÑÑиÑовки, вÑбиÑаемое по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð° локалÑном ÑеÑвеÑе, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð²ÑбиÑаемого на ÑдалÑнном.import_default(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑанавливаеÑ, бÑдÑÑ Ð»Ð¸ в опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ, импоÑÑиÑÑемÑÑ Ñ Ð²Ð½ÐµÑнего ÑеÑвеÑа, вклÑÑаÑÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñе Ð´Ð»Ñ ÑÑолбÑов вÑÑажениÑ
DEFAULT. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¸ не вклÑÑаÑÑÑÑ. ÐÑли Ð²Ñ Ð²ÐºÐ»ÑÑиÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, оÑÑеÑегайÑеÑÑ Ð²ÑÑажений по ÑмолÑаниÑ, коÑоÑÑе могÑÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð½Ð° локалÑном ÑеÑвеÑе не Ñак, как на ÑдалÑнном; напÑимеÑ, ÑаÑÑÑй иÑÑоÑник пÑоблем ânextval(). ÐÑли в импоÑÑиÑÑемом вÑÑажении иÑполÑзÑÑÑÑÑ ÑÑнкÑии или опеÑаÑоÑÑ, неÑÑÑеÑÑвÑÑÑие локалÑно, командаIMPORTв Ñелом вÑдаÑÑ Ñбой.import_generated(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, вклÑÑаÑÑÑÑ Ð»Ð¸ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð³ÐµÐ½ÐµÑиÑÑемÑÑ ÑÑолбÑов (
GENERATED) в опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ, импоÑÑиÑÑемÑÑ Ñо ÑÑоÑоннего ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âtrue. ÐÑполнениеIMPORTзавеÑÑиÑÑÑ Ð¾Ñибкой, еÑли в импоÑÑиÑÑемом генеÑиÑÑÑÑем вÑÑажении иÑполÑзÑÑÑÑÑ ÑÑнкÑии или опеÑаÑоÑÑ, не ÑÑÑеÑÑвÑÑÑие локалÑно.import_not_null(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑанавливаеÑ, бÑдÑÑ Ð»Ð¸ в опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ, импоÑÑиÑÑемÑÑ Ñ Ð²Ð½ÐµÑнего ÑеÑвеÑа, вклÑÑаÑÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑÑолбÑов
NOT NULL. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¸ вклÑÑаÑÑÑÑ.
ÐамеÑÑÑе, ÑÑо никакие дÑÑгие огÑаниÑениÑ, кÑоме NOT NULL, из ÑдалÑннÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑÑÑ Ð½Ðµ бÑдÑÑ. ХоÑÑ Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð³ÑаниÑениÑ-пÑовеÑки Ð´Ð»Ñ ÑÑоÑонниÑ
ÑаблиÑ, никакиÑ
ÑÑедÑÑв Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого импоÑÑа иÑ
Ð½ÐµÑ Ð¸Ð·-за ÑиÑка ÑазлиÑного вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° локалÑном и ÑдалÑнном ÑеÑвеÑаÑ
. ÐÑÐ±Ð°Ñ ÑÐ°ÐºÐ°Ñ Ð½ÐµÑоглаÑованноÑÑÑ Ð² поведении огÑаниÑений-пÑовеÑок могла Ð±Ñ Ð¿ÑивеÑÑи к Ñложно вÑÑвлÑемÑм оÑибкам в опÑимизаÑии запÑоÑов. ÐоÑÑомÑ, еÑли Ð²Ñ Ñ
оÑиÑе импоÑÑиÑоваÑÑ Ð¾Ð³ÑаниÑениÑ-пÑовеÑки, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑделаÑÑ ÑÑо вÑÑÑнÑÑ Ð¸ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð½Ð¸Ð¼Ð°ÑелÑно пÑовеÑиÑÑ ÑеманÑÐ¸ÐºÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾. Ðолее подÑобно инÑеÑпÑеÑаÑÐ¸Ñ Ð¾Ð³ÑаниÑений-пÑовеÑок Ð´Ð»Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¾Ð¿Ð¸Ñана в CREATE FOREIGN TABLE.
ТаблиÑÑ Ð¸Ð»Ð¸ ÑÑоÑонние ÑаблиÑÑ, ÑвлÑÑÑиеÑÑ ÑекÑиÑми некоÑоÑой дÑÑгой ÑаблиÑÑ, импоÑÑиÑÑÑÑÑÑ, ÑолÑко когда они ÑвнÑм обÑазом ÑÐºÐ°Ð·Ð°Ð½Ñ Ð² пÑедложении LIMIT TO. РпÑоÑивном ÑлÑÑае команда IMPORT FOREIGN SCHEMA авÑомаÑиÑеÑки иÑклÑÑÐ°ÐµÑ Ð¸Ñ
. Так как вÑе даннÑе могÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑеÑез коÑневÑÑ ÑаблиÑÑ Ð² иеÑаÑÑ
ии ÑекÑиониÑованиÑ, должно бÑÑÑ Ð´Ð¾ÑÑаÑоÑно импоÑÑиÑоваÑÑ ÑолÑко ÑекÑиониÑованнÑе ÑаблиÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп ко вÑем даннÑм, не ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе обÑекÑÑ.
F.62.1.10. ÐаÑамеÑÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñоединением
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе ÑоединениÑ, ÑÑÑанавливаемÑе postgres_fdw Ñо ÑÑоÑонними ÑеÑвеÑами, оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑми в ÑекÑÑем ÑеанÑе Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑзованиÑ.
keep_connections(boolean)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸
postgres_fdwоÑÑавлÑÑÑ Ð¾ÑкÑÑÑÑми ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñо ÑÑоÑонними ÑеÑвеÑами, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÑледÑÑÑие запÑоÑÑ Ñакже могли иÑполÑзоваÑÑ ÑÑи ÑоединениÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко Ð´Ð»Ñ ÑÑоÑоннего ÑеÑвеÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âon. ÐÑли задано знаÑениеoff, вÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑÑим ÑÑоÑонним ÑеÑвеÑом бÑдÑÑ Ð·Ð°ÐºÑÑваÑÑÑÑ Ð² конÑе каждой ÑÑанзакÑии.
F.62.2. ФÑнкÑии
postgres_fdw_get_connections(OUT server_name text, OUT valid boolean) returns setof recordÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¸Ð¼ÐµÐ½Ð° вÑÐµÑ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑеÑвеÑов, Ñ ÐºÐ¾ÑоÑÑми
postgres_fdwÑÑÑановил Ñоединение в локалÑном ÑеанÑе. Ðна Ñакже возвÑаÑÐ°ÐµÑ Ð¿Ñизнак дейÑÑвиÑелÑного ÑоединениÑ. ÐÑÐ¾Ñ Ð¿Ñизнак âfalse, еÑли ÑÑо Ñоединение Ñо ÑÑоÑонним ÑеÑвеÑом иÑполÑзовалоÑÑ Ð² ÑекÑÑей локалÑной ÑÑанзакÑии, но обÑÐµÐºÑ ÑÑоÑоннего ÑеÑвеÑа или ÑопоÑÑавление полÑзоваÑÐµÐ»Ñ Ð±Ñли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¸Ð»Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ñ (обÑаÑиÑе внимание, ÑÑо еÑли обÑÐµÐºÑ ÑÑоÑоннего ÑеÑвеÑа ÑдалÑн, вмеÑÑо имени ÑеÑвеÑа в запиÑи ÑÑого ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð±ÑдеÑNULL). Такое недейÑÑвÑÑÑее Ñоединение бÑÐ´ÐµÑ Ð·Ð°ÐºÑÑÑо в конÑе ÑÑанзакÑии. ÐÐ»Ñ Ð´ÐµÐ¹ÑÑвиÑелÑнÑÑ Ñоединений ÑÑÐ¾Ñ Ð¿Ñизнак ÑÑÑановлен. ÐÑли оÑкÑÑÑÑÑ Ñоединений неÑ, ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ запиÑи. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии:postgres=# SELECT * FROM postgres_fdw_get_connections() ORDER BY 1; server_name | valid -------------+------- loopback1 | t loopback2 | f
postgres_fdw_disconnect(server_name text) returns booleanÐÑа ÑÑнкÑÐ¸Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ð¾ÑкÑÑÑÑе ÑоединениÑ, ÑÑÑановленнÑе
postgres_fdwÑ ÑказаннÑм ÑÑоÑонним ÑеÑвеÑом в локалÑном ÑеанÑе. ÐбÑаÑиÑе внимание, ÑÑо Ñ Ð¾Ð´Ð½Ð¸Ð¼ ÑеÑвеÑом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлено неÑколÑко Ñоединений, иÑполÑзÑÑÑÐ¸Ñ ÑазлиÑнÑе ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей. ÐÑли какие-либо ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² ÑекÑÑей локалÑной ÑÑанзакÑии, они не бÑдÑÑ ÑазоÑванÑ, о ÑÑм ÑообÑÐ°Ñ ÑооÑвеÑÑÑвÑÑÑие пÑедÑпÑеждениÑ. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ Ñоединение, она возвÑаÑаеÑtrue; в пÑоÑивном ÑлÑÑаеfalse. ÐÑли ÑÑоÑонний ÑеÑÐ²ÐµÑ Ñ ÑказаннÑм именем не найден, вÑводиÑÑÑ ÑообÑение об оÑибке. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии:postgres=# SELECT postgres_fdw_disconnect('loopback1'); postgres_fdw_disconnect ------------------------- tpostgres_fdw_disconnect_all() returns booleanÐÑа ÑÑнкÑÐ¸Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ð²Ñе оÑкÑÑÑÑе ÑоединениÑ, ÑÑÑановленнÑе
postgres_fdwÑо ÑÑоÑонними ÑеÑвеÑами в локалÑном ÑеанÑе. ÐÑли какие-либо ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² ÑекÑÑей локалÑной ÑÑанзакÑии, они не бÑдÑÑ ÑазоÑванÑ, о Ñем ÑообÑÐ°Ñ ÑооÑвеÑÑÑвÑÑÑие пÑедÑпÑеждениÑ. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ Ñоединение, она возвÑаÑаеÑtrue; в пÑоÑивном ÑлÑÑаеfalse. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии:postgres=# SELECT postgres_fdw_disconnect_all(); postgres_fdw_disconnect_all ----------------------------- t
F.62.3. УпÑавление Ñоединением
ÐодÑÐ»Ñ postgres_fdw ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñоединение Ñо ÑÑоÑонним ÑеÑвеÑом пÑи пеÑвом запÑоÑе, в коÑоÑом ÑÑаÑÑвÑÐµÑ ÑÑоÑоннÑÑ ÑаблиÑа, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñо ÑÑоÑонним ÑеÑвеÑом. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо Ñоединение ÑоÑ
ÑанÑеÑÑÑ Ð¸ повÑоÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑиÑ
запÑоÑов в Ñом же ÑеанÑе. ÐÑим поведением ÑпÑавлÑÐµÑ Ð¿Ð°ÑамеÑÑ ÑÑоÑоннего ÑеÑвеÑа keep_connections. ÐÑли Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑÑоÑÐ¾Ð½Ð½ÐµÐ¼Ñ ÑеÑвеÑÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвÑÑÑÑÑ ÑазнÑе полÑзоваÑели (ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей), оÑделÑное Ñоединение ÑÑÑанавливаеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей.
ÐÑи изменении или Ñдалении опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑоннего ÑеÑвеÑа или ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей, ÑвÑзаннÑе Ñ Ð½Ð¸Ð¼Ð¸ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÑÑваÑÑÑÑ. Ðо обÑаÑиÑе внимание, ÑÑо еÑли какие-либо ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² ÑекÑÑей локалÑной ÑÑанзакÑии, Ñо они ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð´Ð¾ конÑа ÑÑанзакÑии. ÐÑли Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, задейÑÑвÑÑÑÐ¸Ñ ÑÑоÑонние ÑаблиÑÑ, понадобÑÑÑÑ Ñже закÑÑÑÑе ÑоединениÑ, они бÑдÑÑ Ð¾ÑкÑÑÑÑми заново.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÑановленное Ñоединение ÑоÑ
ÑанÑеÑÑÑ Ð´Ð¾ конÑа локалÑного или ÑооÑвеÑÑÑвÑÑÑего ÑдалÑнного ÑеанÑа. ЧÑÐ¾Ð±Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÑÑвалиÑÑ Ñвно, можно оÑклÑÑиÑÑ Ð¿Ð°ÑамеÑÑ keep_connections или иÑполÑзоваÑÑ ÑÑнкÑии postgres_fdw_disconnect и postgres_fdw_disconnect_all. Ð ÑаÑÑноÑÑи, ÑÑи ÑÑнкÑии Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ñем, ÑÑо позволÑÑÑ Ð¾ÑвободиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÑоÑоннем ÑеÑвеÑе, закÑÑв Ñже не нÑжнÑе.
F.62.4. УпÑавление ÑÑанзакÑиÑми
РпÑоÑеÑÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа, в коÑоÑом ÑÑаÑÑвÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо ÑдалÑннÑе ÑаблиÑÑ Ð½Ð° ÑÑоÑоннем ÑеÑвеÑе, postgres_fdw оÑкÑÑÐ²Ð°ÐµÑ ÑÑанзакÑÐ¸Ñ Ð½Ð° ÑдалÑнном ÑеÑвеÑе, еÑли ÑÐ°ÐºÐ°Ñ ÑÑанзакÑÐ¸Ñ ÐµÑÑ Ð½Ðµ бÑла оÑкÑÑÑа Ð´Ð»Ñ ÑекÑÑей локалÑной ÑÑанзакÑии. ÐÑа ÑдалÑÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ ÑикÑиÑÑеÑÑÑ Ð¸Ð»Ð¸ пÑеÑÑваеÑÑÑ, когда ÑикÑиÑÑеÑÑÑ Ð¸Ð»Ð¸ пÑеÑÑваеÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð°Ñ ÑÑанзакÑиÑ. ÐодобнÑм обÑазом ÑеализÑеÑÑÑ Ð¸ ÑпÑавление ÑоÑками ÑоÑ
ÑанениÑ.
ÐÐ»Ñ ÑдалÑнной ÑÑанзакÑии вÑбиÑаеÑÑÑ Ñежим изолÑÑии SERIALIZABLE, когда локалÑÐ½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð¾ÑкÑÑÑа в Ñежиме SERIALIZABLE; в пÑоÑивном ÑлÑÑае пÑименÑеÑÑÑ Ñежим REPEATABLE READ. ÐÑÐ¾Ñ Ð²ÑÐ±Ð¾Ñ Ð³Ð°ÑанÑиÑÑеÑ, ÑÑо еÑли запÑÐ¾Ñ ÑканиÑÑÐµÑ Ð½ÐµÑколÑко ÑÐ°Ð±Ð»Ð¸Ñ Ð½Ð° ÑдалÑнном ÑеÑвеÑе, он бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ ÑоглаÑованнÑе даннÑе одного Ñнимка Ð´Ð»Ñ Ð²ÑеÑ
ÑканиÑований. Ðак ÑледÑÑвие, поÑледоваÑелÑнÑе запÑоÑÑ Ð² одной ÑÑанзакÑии бÑдÑÑ Ð²Ð¸Ð´ÐµÑÑ Ð¾Ð´Ð½Ð¸ даннÑе ÑдалÑнного ÑеÑвеÑа, даже еÑли на нÑм паÑаллелÑно пÑоиÑÑ
одÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, вÑзваннÑе дÑÑгими дейÑÑвиÑми. ÐÑо поведение ожидаемо Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ñной ÑÑанзакÑии в ÑежимаÑ
SERIALIZABLE и REPEATABLE READ, но Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ñной ÑÑанзакÑии в Ñежиме READ COMMITTED оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñм. РбÑдÑÑиÑ
вÑпÑÑкаÑ
Postgres Pro ÑÑи пÑавила могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ.
ÐамеÑÑÑе, ÑÑо подгоÑÐ¾Ð²ÐºÑ ÑдалÑнной ÑÑанзакÑии Ð´Ð»Ñ Ð´Ð²ÑÑ
Ñазной ÑикÑаÑии postgres_fdw в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ поддеÑживаеÑ.
F.62.5. ÐпÑимизаÑÐ¸Ñ ÑдалÑннÑÑ Ð·Ð°Ð¿ÑоÑов
ÐбÑÑÑка postgres_fdw пÑÑаеÑÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ ÑдалÑннÑе запÑоÑÑ, ÑменÑÑÐ°Ñ Ð¾Ð±ÑÑм обмена даннÑми Ñо ÑÑоÑонними ÑеÑвеÑами. ÐÐ»Ñ ÑÑого она Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑедаваÑÑ Ð½Ð° вÑполнение ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE и не полÑÑаÑÑ ÑÑолбÑÑ ÑаблиÑÑ, не ÑÑебÑÑÑиеÑÑ Ð´Ð»Ñ ÑекÑÑего запÑоÑа. ЧÑÐ¾Ð±Ñ ÑменÑÑиÑÑ ÑиÑк некоÑÑекÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE пеÑедаÑÑÑÑ ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ, ÑолÑко еÑли в ниÑ
иÑполÑзÑÑÑÑÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
, опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, вÑÑÑоеннÑе в ÑдÑо или оÑноÑÑÑиеÑÑ Ðº ÑаÑÑиÑениÑм, пеÑеÑиÑленнÑм в паÑамеÑÑе extensions. ÐпеÑаÑоÑÑ Ð¸ ÑÑнкÑии в ÑакиÑ
пÑедложениÑÑ
Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ÑÑоÑннÑми (IMMUTABLE). ÐÐ»Ñ Ð·Ð°Ð¿ÑоÑов UPDATE или DELETE обÑÑÑка postgres_fdw пÑÑаеÑÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ Ð²Ñполнение, пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð²ÐµÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° ÑдалÑннÑй ÑеÑвеÑ, еÑли в запÑоÑе Ð½ÐµÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE, коÑоÑое нелÑÐ·Ñ Ð±Ñло Ð±Ñ Ð¿ÐµÑедаÑÑ, не вÑполнÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñное Ñоединение, в Ñелевой ÑаблиÑе оÑÑÑÑÑÑвÑÑÑ Ñ
ÑанимÑе генеÑиÑÑемÑе ÑÑолбÑÑ Ð¸ локалÑнÑе ÑÑиггеÑÑ BEFORE/AFTER ÑÑÐ¾Ð²Ð½Ñ ÑÑÑоки, а в ÑодиÑелÑÑкиÑ
пÑедÑÑавлениÑÑ
Ð½ÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ CHECK OPTION. ÐÑоме Ñого, в запÑоÑаÑ
UPDATE вÑÑажениÑ, пÑиÑваиваемÑе ÑелевÑм ÑÑолбÑам, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ ÑолÑко вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и поÑÑоÑннÑе (IMMUTABLE) опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, ÑÑÐ¾Ð±Ñ ÑменÑÑиÑÑ ÑиÑк невеÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа.
Ðогда обÑÑÑка postgres_fdw обнаÑÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñоединение ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð½Ð° одном ÑÑоÑоннем ÑеÑвеÑе, она пеÑедаÑÑ Ð²ÑÑ Ñоединение ÑÑÐ¾Ð¼Ñ ÑеÑвеÑÑ, еÑли ÑолÑко по какой-Ñо пÑиÑине не ÑеÑиÑ, ÑÑо бÑÐ´ÐµÑ ÑÑÑекÑивнее вÑбиÑаÑÑ ÑÑÑоки из каждой ÑаблиÑÑ Ð¿Ð¾ оÑделÑноÑÑи, или ÑопоÑÑавлÑемÑе пÑи обÑаÑении к ÑаблиÑам полÑзоваÑели оказÑваÑÑÑÑ ÑазнÑми. ÐÑи пеÑедаÑе пÑедложений JOIN пÑинимаÑÑÑÑ Ñе же меÑÑ Ð¿ÑедоÑÑоÑожноÑÑи, ÑÑо бÑли опиÑÐ°Ð½Ñ Ð²ÑÑе Ð´Ð»Ñ Ð¿Ñедложений WHERE.
ÐапÑоÑ, ÑакÑиÑеÑки оÑпÑавлÑемÑй ÑдалÑÐ½Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð´Ð»Ñ Ð²ÑполнениÑ, можно изÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ EXPLAIN VERBOSE.
F.62.6. ÐкÑÑжение ÑдалÑнного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов
Ð ÑдалÑннÑÑ
ÑеанÑаÑ
, ÑÑÑановленнÑÑ
обÑÑÑкой postgres_fdw, в паÑамеÑÑе search_path задаÑÑÑÑ ÑолÑко pg_catalog, Ñак ÑÑо без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ Ð²Ð¸Ð´Ð½Ñ ÑолÑко вÑÑÑоеннÑе обÑекÑÑ. ÐÑо не пÑоблема Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, коÑоÑÑе генеÑиÑÑÐµÑ Ñама postgres_fdw, Ñак как она вÑегда добавлÑÐµÑ Ñакие ÑказаниÑ. Ðднако ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ð°Ñно Ð´Ð»Ñ ÑÑнкÑий, коÑоÑÑе вÑполнÑÑÑÑÑ Ð½Ð° ÑдалÑнном ÑеÑвеÑе пÑи ÑÑабаÑÑвании ÑÑиггеÑов или пÑавил Ð´Ð»Ñ ÑдалÑннÑÑ
ÑаблиÑ. ÐапÑимеÑ, еÑли ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа на Ñамом деле пÑедÑÑавлÑÐµÑ Ñобой пÑедÑÑавление, лÑбÑе ÑÑнкÑии, иÑполÑзÑемÑе в ÑÑом пÑедÑÑавлении, бÑдÑÑ Ð²ÑполнÑÑÑÑÑ Ñ Ñаким огÑаниÑеннÑм пÑÑÑм поиÑка. ÐоÑÑÐ¾Ð¼Ñ ÑекомендÑеÑÑÑ Ð² ÑакиÑ
ÑÑнкÑиÑÑ
дополнÑÑÑ ÑÑ
емой вÑе имена либо добавлÑÑÑ Ð¿Ð°ÑамеÑÑÑ SET search_path (Ñм. CREATE FUNCTION) в опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑакиÑ
ÑÑнкÑий, ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ñй ими пÑÑÑ Ð¿Ð¾Ð¸Ñка в окÑÑжении.
ÐбÑÑÑка postgres_fdw подобнÑм обÑазом ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ ÑдалÑнного ÑеанÑа ÑазлиÑнÑе паÑамеÑÑÑ:
TimeZone â
UTCDateStyle â
ISOIntervalStyle â
postgresextra_float_digits пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение
3Ð´Ð»Ñ ÑдалÑннÑÑ ÑеÑвеÑов веÑÑии 9.0 и новее либо2Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ ÑÑаÑÑÑ Ð²ÐµÑÑий
С ними пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼ÐµÐ½ÐµÐµ веÑоÑÑнÑ, Ñем Ñ search_path, но еÑли они возникнÑÑ, иÑ
можно ÑÑегÑлиÑоваÑÑ, ÑÑÑановив нÑжнÑе знаÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SET.
ÐÑо поведение не ÑекомендÑеÑÑÑ Ð¿ÐµÑеопÑеделÑÑÑ, ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑиÑ
паÑамеÑÑов на ÑÑовне ÑеанÑа; ÑÑо ÑкоÑее вÑего пÑиведÑÑ Ðº поломке postgres_fdw.
F.62.7. СовмеÑÑимоÑÑÑ Ñ ÑазнÑми веÑÑиÑми
ÐодÑÐ»Ñ postgres_fdw Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ñ ÑдалÑннÑми ÑеÑвеÑами веÑÑий, наÑÐ¸Ð½Ð°Ñ Ñ PostgreSQL 8.3. ÐозможноÑÑÑ ÑабоÑÑ Ð² Ñежиме «ÑолÑко Ð´Ð»Ñ ÑÑениÑ» доÑÑÑпна, наÑÐ¸Ð½Ð°Ñ Ñ 8.1. Ðднако пÑи ÑÑом еÑÑÑ Ð¾Ð³ÑаниÑение, вÑзванное Ñем, ÑÑо postgres_fdw полагаеÑ, ÑÑо поÑÑоÑннÑе вÑÑÑоеннÑе ÑÑнкÑии и опеÑаÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно пеÑедаваÑÑÑÑ Ð½Ð° ÑдалÑннÑй ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð²ÑполнениÑ, еÑли они ÑигÑÑиÑÑÑÑ Ð² пÑедложении WHERE Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ. Таким обÑазом, вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑÑнкÑиÑ, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² более новой веÑÑии, Ñем на ÑдалÑнном ÑеÑвеÑе, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑпÑавлена на вÑполнение, ÑÑо в ÑезÑлÑÑаÑе пÑиведÑÑ Ðº оÑибке «ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ» или подобной. ÐÑÐºÐ°Ð·Ñ Ñакого Ñипа можно пÑедоÑвÑаÑиÑÑ, пеÑепиÑав запÑоÑ, напÑимеÑ, помеÑÑив ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑоÑоннÑÑ ÑаблиÑÑ Ð²Ð¾ вложеннÑй SELECT Ñ OFFSET 0 в каÑеÑÑве заÑиÑÑ Ð¾Ñ Ð¾Ð¿ÑимизаÑии, и пÑименив пÑоблемаÑиÑнÑÑ ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ опеÑаÑÐ¾Ñ ÑнаÑÑжи ÑÑого вложенного SELECT.
F.62.8. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии
postgres_fdw.application_name(string)ÐадаÑÑ Ð·Ð½Ð°Ñение конÑигÑÑаÑионного паÑамеÑÑа application_name, иÑполÑзÑемого пÑи Ñоединении
postgres_fdwÑо ÑÑоÑонним ÑеÑвеÑом. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÐµÑеопÑеделÑÐµÑ ÑвойÑÑвоapplication_name, заданное Ð´Ð»Ñ Ð¾Ð±ÑекÑа ÑÑоÑоннего ÑеÑвеÑа. ÐбÑаÑиÑе внимание, ÑÑо изменение ÑÑого паÑамеÑÑа не заÑÑÐ¾Ð½ÐµÑ ÑÑÑеÑÑвÑÑÑие подклÑÑение, а повлиÑÐµÑ ÑолÑко на Ð²Ð½Ð¾Ð²Ñ ÑÑÑанавливаемÑе.Ð
postgres_fdw.application_nameможно задаÑÑ Ð»ÑбÑÑ ÑÑÑÐ¾ÐºÑ Ð¿ÑоизволÑной длинÑ, ÑодеÑжаÑÑÑ Ð½Ðµ ÑолÑко ASCII-ÑимволÑ. Ðднако обÑаÑиÑе внимание, ÑÑо когда она пеÑедаÑÑÑÑ ÑÑоÑÐ¾Ð½Ð½ÐµÐ¼Ñ ÑеÑвеÑÑ Ð² каÑеÑÑве паÑамеÑÑаapplication_name, она ÑÑекаеÑÑÑ Ð´Ð¾NAMEDATALENÑимволов, а ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ из набоÑа ASCII заменÑÑÑÑÑ Ð²Ð¾Ð¿ÑоÑиÑелÑнÑми знаками (?). Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº application_name.СимволÑ
%в ÑÑой ÑÑÑоке обознаÑаÑÑ Ð½Ð°Ñало ÑпеÑпоÑледоваÑелÑноÑÑей, заменÑемÑÑ Ð¾Ð¿Ð¸Ñанной далее инÑоÑмаÑией. ÐеизвеÑÑнÑе ÑпÑавлÑÑÑие поÑледоваÑелÑноÑÑи игноÑиÑÑÑÑÑÑ. ÐÑе оÑÑалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÐµÑеноÑÑÑÑÑ Ð² Ð¸Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· изменений. ÐбÑаÑиÑе внимание, ÑÑо иÑполÑзоваÑÑ Ð·Ð½Ð°ÐºÐ¸ плÑÑ/минÑÑ Ð¸ ÑиÑло Ð¼ÐµÐ¶Ð´Ñ Ð·Ð½Ð°ÐºÐ¾Ð¼%и ÑпеÑÑимволом (ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑиÑÑ Ð²ÑÑавнивание или дополнение) нелÑзÑ.СпеÑпоÑледоваÑелÑноÑÑÑ ÐазнаÑение %aÐÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° локалÑном ÑеÑвеÑе %cID ÑеанÑа на локалÑном ÑеÑвеÑе (подÑобнее Ñм. log_line_prefix) %CÐÐ¼Ñ ÐºÐ»Ð°ÑÑеÑа на локалÑном ÑеÑвеÑе (подÑобнее Ñм. cluster_name) %uÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½Ð° локалÑном ÑеÑвеÑе %dÐÐ¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° локалÑном ÑеÑвеÑе %pPID обÑлÑживаÑÑего пÑоÑеÑÑа на локалÑном ÑеÑвеÑе %%ÐÑквалÑно % ÐапÑимеÑ, еÑли полÑзоваÑелÑ
local_userÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑlocal_dbк базе даннÑÑforeign_dbÐ¾Ñ Ð¸Ð¼ÐµÐ½Ð¸foreign_user, знаÑение'db=%d, user=%u'заменÑеÑÑÑ Ð½Ð°'db=local_db, user=local_user'.
F.62.9. ÐÑимеÑÑ
Ðиже пÑиведÑн пÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑоÑонней ÑаблиÑÑ Ñ Ð¿Ñименением postgres_fdw. СнаÑала ÑÑÑановиÑе ÑаÑÑиÑение:
CREATE EXTENSION postgres_fdw;
ÐаÑем ÑоздайÑе ÑÑоÑонний ÑеÑÐ²ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE SERVER. Рданном пÑимеÑе Ð¼Ñ Ñ
оÑим подклÑÑиÑÑÑÑ Ðº ÑеÑвеÑÑ Postgres Pro, ÑабоÑаÑÑÐµÐ¼Ñ Ð¿Ð¾ адÑеÑÑ 192.83.123.89, поÑÑ 5432. Ðаза даннÑÑ
, к коÑоÑой ÑÑÑанавливаеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение, на ÑдалÑнном ÑеÑвеÑе назÑваеÑÑÑ foreign_db:
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.83.123.89', port '5432', dbname 'foreign_db');ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñоли, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвована на ÑдалÑнном ÑеÑвеÑе, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CREATE USER MAPPING задаÑÑÑÑ ÑопоÑÑавление полÑзоваÑелей:
CREATE USER MAPPING FOR local_user
SERVER foreign_server
OPTIONS (user 'foreign_user', password 'password');ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑоздаÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ, пÑименив ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE FOREIGN TABLE. Ð ÑÑом пÑимеÑе Ð¼Ñ Ñ
оÑим обÑаÑиÑÑÑÑ Ðº ÑаблиÑе some_schema.some_table на ÑдалÑнном ÑеÑвеÑе. ÐокалÑнÑм именем ÑÑой ÑаблиÑÑ Ð±ÑÐ´ÐµÑ foreign_table:
CREATE FOREIGN TABLE foreign_table (
id integer NOT NULL,
data text
)
SERVER foreign_server
OPTIONS (schema_name 'some_schema', table_name 'some_table'); Ðажно, ÑÑÐ¾Ð±Ñ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и дÑÑгие ÑвойÑÑва ÑÑолбÑов, обÑÑвленнÑÑ
в CREATE FOREIGN TABLE, ÑооÑвеÑÑÑвовали ÑакÑиÑеÑкой ÑдалÑнной ÑаблиÑе. Также Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑолбÑов, еÑли ÑолÑко Ð²Ñ Ð½Ðµ добавиÑе паÑамеÑÑÑ column_name Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
ÑÑолбÑов, задаÑÑие иÑ
ÑеалÑнÑе имена в ÑдалÑнной ÑаблиÑе. Ðо многиÑ
ÑлÑÑаÑÑ
иÑполÑзоваÑÑ IMPORT FOREIGN SCHEMA пÑедпоÑÑиÑелÑнее, Ñем конÑÑÑÑиÑоваÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð²ÑÑÑнÑÑ.
F.62.10. ÐвÑоÑ
ШигеÑÑ Ð¥Ð°Ð½Ð°Ð´Ð° <[email protected]>