Archiwum kategorii: PostgreSQL

Konfiguracja postgres_fdw (Foreign Data Wrapper) w PostgreSQL

Foreign Data Wrapper w PostgreSQL pozwala na dostęp do danych z innych baz danych PostgreSQL tak, jakby były one częścią lokalnego serwera. Oto ogólny przewodnik po konfiguracji:

1. Instalacja rozszerzenia:
Jeśli rozszerzenie postgres_fdw nie jest jeszcze zainstalowane, zainstaluj je w bazie danych, w której chcesz mieć dostęp do danych zdalnych:

CREATE EXTENSION postgres_fdw;
SQL

2. Utworzenie serwera obcego:
Serwer obcy reprezentuje zdalną bazę danych PostgreSQL. Musisz podać informacje o połączeniu.

CREATE SERVER moj_serwer_zdalny
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'adres_hosta_zdalnego', port '5432', dbname 'nazwa_bazy_zdalnej');
SQL
  • moj_serwer_zdalny: Nazwa, którą nadasz serwerowi.
  • adres_hosta_zdalnego: Adres IP lub nazwa hosta zdalnej bazy danych.
  • 5432: Port, na którym nasłuchuje zdalna baza danych (domyślnie 5432).
  • nazwa_bazy_zdalnej: Nazwa bazy danych na serwerze zdalnym.

3. Utworzenie mapowania użytkownika:
Mapowanie użytkownika łączy lokalnego użytkownika z użytkownikiem na zdalnym serwerze. To pozwala na uwierzytelnienie.

CREATE USER MAPPING FOR uzytkownik_lokalny
SERVER moj_serwer_zdalny
OPTIONS (user 'uzytkownik_zdalny', password 'haslo_uzytkownika_zdalnego');
SQL
  • uzytkownik_lokalny: Nazwa użytkownika w lokalnej bazie danych.
  • uzytkownik_zdalny: Nazwa użytkownika w zdalnej bazie danych.
  • haslo_uzytkownika_zdalnego: Hasło użytkownika w zdalnej bazie danych.

WAŻNE: Zaleca się używanie bezpieczniejszych metod uwierzytelniania, takich jak pliki .pgpass, zamiast przechowywać hasło bezpośrednio w definicji mapowania użytkownika. Plik .pgpass pozwala na przechowywanie haseł w bezpieczny sposób.

4. Używanie tabeli obcej:
Tabela obca definiuje, które tabele z zdalnej bazy danych chcesz udostępnić lokalnie.

CREATE FOREIGN TABLE moja_tabela_zdalna (
    id integer,
    nazwa text,
    data date
)
SERVER moj_serwer_zdalny
OPTIONS (schema 'public', table 'nazwa_tabeli_w_bazie_zdalnej');
SQL
  • moja_tabela_zdalna: Nazwa, którą nadasz tabeli lokalnie.
  • id integer, nazwa text, data date: Definicja kolumn tabeli (musi odpowiadać kolumnom w zdalnej tabeli).
  • schema 'public’: Nazwa schematu w zdalnej bazie danych (często 'public’).
  • nazwa_tabeli_w_bazie_zdalnej: Nazwa tabeli w zdalnej bazie danych.

5. Używanie tabeli obcej:
Po utworzeniu tabeli obcej, możesz jej używać tak, jakby była lokalna:

SELECT * FROM moja_tabela_zdalna;
SQL

Przykład z .pgpass:

1. Utwórz plik .pgpass w katalogu domowym użytkownika (np. ~/.pgpass na Linux/macOS, %APPDATA%\postgresql\pgpass.conf na Windows).

2. Dodaj linię w formacie: hostname:port:database:username:password

3. Ustaw odpowiednie uprawnienia do pliku (np. chmod 0600 ~/.pgpass na Linux/macOS).

4. W definicji USER MAPPING pomiń opcję password:

CREATE USER MAPPING FOR uzytkownik_lokalny
SERVER moj_serwer_zdalny
OPTIONS (user 'uzytkownik_zdalny');
SQL