Направете вашите отдалечени бази данни не толкова отдалечени
По-големите внедрявания на бази данни може да се нуждаят от множество Postgres
екземпляри, работещи на различни ресурси или хостове. С течение на времето може да стане сложно и тромаво управлението на разпределения достъп до множество екземпляри, следенето на разрешенията, управлението на IP адреси и т.н.
Това ви кара да искате да има някакъв начин да централизирате всичките си данни...
Е, има!
Не, това не е приставка на трета страна или отделна обобщена база данни. Това е обвивката на чужди данни.
Това е невероятно удобно разширение на Postgres
, което ви позволява да добавяте отдалечени сървъри към съществуващ екземпляр и да ги правите заявки, сякаш са локални таблици. Страхотно!
С няколко прости команди можете да настроите съпоставяне към един от вашите отдалечени сървъри. Нека да проучим как изглежда това.
Добавете разширението
Докато използвате скорошна версия Postgres
, трябва да можете да създадете разширението с тази проста команда:
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
Добавете сървъра
Сега ще настроим отдалечения сървър с помощта на разширението Foreign Data Wrapper, което току-що добавихме. Чувствайте се свободни да му дадете уникално име:
CREATE SERVER <remote_server_name> FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname '<database_name_on_server>', ...)
Това са само част от опциите. За пълен списък с опции за връзка с отдалечен сървър посетете: https://www.postgresql.org/docs/9.5/postgres-fdw.html.
Карта на потребителските разрешения
За да можете да правите заявки в отдалечената база данни, тя ще трябва да знае от кой потребител да извърши операцията. За да работи това, трябва да добавите потребителско съпоставяне за сървъра, който току-що сте добавили. Това по същество е картографиране на локален потребител на вашия сървър към потребител на отдалечения сървър.
CREATE USER MAPPING FOR <local_username> SERVER <remote_server_name> OPTIONS (user '<remote_username>', password '<remote_pass>', ...);
Още веднъж, това не са всички налични опции. Обърнете се към връзката по-горе в раздела за сървъра за повече информация.
Импортиране на таблица или схема
Сега, след като сте добавили информацията за сървъра и потребителя, можете да започнете да импортирате данните. В този момент имате няколко възможности. Двата основни метода са да импортирате отделни таблици (една по една) или да импортирате цяла отдалечена схема.
Нека да разгледаме как работи първата опция:
CREATE FOREIGN TABLE <table_name> (id bigint, field1 text) SERVER <remote_server_name> OPTIONS (schema_name 'public', table_name 'my_table');
С този метод трябва да укажете подробности за колоната и типа данни на отдалечената таблица. В следващия метод ще направим изцяло нова схема и ще импортираме схемата на отдалечения сървър в нея:
CREATE SCHEMA <new_local_schema_name> IMPORT FOREIGN SCHEMA <remote_server_schema_name> LIMIT TO (table1, table2, table3, ...) FROM SERVER <remote_server_name> INTO <new_local_schema_name>
Време за запитване!
Сега, след като всичко е настроено, трябва да можете да правите заявки към отдалечения сървър за данни. Контекстът е доста ясен, ако приемем, че разрешенията са картографирани правилно:
SELECT * FROM <my_local_schema>.<remote_table> LIMIT 1;
Ако всичко работи, трябва да видите един ред, върнат от таблицата на отдалечения сървър.
Полезно е, когато наименувате всеки елемент по време на този процес, да излезете с логическа схема, която е лесна за извеждане. Например, ако имате съпоставяне едно към едно на Postgres
екземпляри към хостове, можете да използвате името на хоста на този хост като отдалечен сървър и отдалечена схема. Това ще помогне, когато пишете заявки, защото ще можете бързо да разберете кое към какво съответства.
Обвивката на чужди данни е бърз и ефективен начин за бързо настройване на достъп до вашите разпределени Postgres
екземпляри. Възможността да правите заявки от централизирана точка намалява административните разходи за разрешения и управление на достъпа.
Благодаря, че разгледахте последната ми статия за Postgres
! Ако тази ви е харесала, не се колебайте да разгледате другите ми статии, фокусирани върху разработчиците.