Направете вашите отдалечени бази данни не толкова отдалечени

По-големите внедрявания на бази данни може да се нуждаят от множество 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! Ако тази ви е харесала, не се колебайте да разгледате другите ми статии, фокусирани върху разработчиците.