1

Temat: pobieranie danych z wielu serwerów do jednej bazy

Mam dylemat jak pobrać dane z tabel na różnych serwerach do swojej lokalnej bazy.
Czy da się w pytaniu sql podać z jakiego serwera bazy ma pobrać dane?
Mam 6 serwerów w różnych lokalizacjach w których jest tabela z taką sama strukturą chcę dokonać złączenia tych tabel na serwerze nr 7 lub na jednym z nich najlepiej za pomocą PHP.

normalnie mam serwer 1:
$dbconn1 = pg_connect("host=10.10.1.30 port=5432 dbname=gostyn user=postgres password=postgres");
$query = " select * from tabela1
                  union
                  select * from tabela2;";
$rezult1 = pg_query($query);


Jak powyższy sposób zastosować do łączenia tabel z rożnych serwerów?

2

Odp: pobieranie danych z wielu serwerów do jednej bazy

Możesz zrobić na bazie widok/widok zmaterializowany lub wykonać zapytanie

create or replace view dblink_view as --lub create materialized view dblink_view as

SELECT * FROM dblink('hostaddr=X.X.X.X1 port=5432 dbname=nazaDB1 user=login1 password=haslo1', 'SELECT id, name FROM tabela;') AS tabela1(id integer,name character varying(50))
union all
SELECT * FROM dblink('hostaddr=X.X.X.X1 port=5432 dbname=nazaDB2 user=login2 password=haslo2', 'SELECT id, name FROM tabela;') AS tabela2(id integer,name character varying(50));

możesz tez wykorzystać rozszerzenie postgres_fdw i wykreować na bazie tabele obce, z których bedziesz mógł zawsze pobierać dane

Ostatnio edytowany przez c_michal (2016-03-01 10:50:01)

3

Odp: pobieranie danych z wielu serwerów do jednej bazy

Dzięki sprawdzę!

4

Odp: pobieranie danych z wielu serwerów do jednej bazy

zrobiłem:
create or replace view dblink_view as

SELECT * FROM dblink ('hostaddr=10.10.1.30 port=5432 dbname=gostyn user=postgres password=postgres', 'SELECT * FROM temp_koniec;') AS tabela1
union all
SELECT * FROM dblink ('hostaddr=10.10.1.30 port=5432 dbname=koscielec user=postgres password=postgres', 'SELECT * FROM temp_koniec;') AS tabela2;



i mam :
ERROR:  function dblink(unknown, unknown) does not exist
LINE 3: SELECT * FROM dblink('hostaddr=10.10.1.30 port=5432 dbname=i...
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
********** Błąd **********

ERROR: function dblink(unknown, unknown) does not exist
Stan SQL: 42883
Wskazówka: No function matches the given name and argument types. You might need to add explicit type casts.
Znak: 102

5

Odp: pobieranie danych z wielu serwerów do jednej bazy

Wykonaj

CREATE EXTENSION dblink;

6

Odp: pobieranie danych z wielu serwerów do jednej bazy

Zadziałało!
Ostatecznie:

CREATE EXTENSION dblink; --Uruchamiane tylko raz!

create or replace view dblink_view as
SELECT * FROM dblink ('hostaddr=10.10.1.30 port=5432 dbname=gostyn user=postgres password=postgres', 'SELECT * FROM bledy;') AS tabela1(blad character(3), rodzaj character(1), opis character varying(60))
union all
SELECT * FROM dblink ('hostaddr=10.10.1.30 port=5432 dbname=koscielec user=postgres password=postgres', 'SELECT * FROM bledy;') AS tabela1(blad character(3), rodzaj character(1), opis character varying(60));
select * from dblink_view

Dało pożądany wynik smile
Wielkie dzięki.