Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odwołanie do innej bazy
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
dragossani
Zaznaczam, że postgresa uruchomiłem pierwszy raz kilka dni temu i jestem zielony, stąd pytanie.
Jak dorwać się do kilu baz jednocześnie w jednym zapytaniu? W MySQL'u robię po prostu "SELECT tabela1.pole1, tabela2.pole2 FROM baza1.tabela1 LEFT JOIN baza2.tabela2 USING(klucz_obcy)". A w Postgresie? Taki zapis mi nie działa. W ogóle siedząc w jednej bazie nie mogę dobrać się do drugiej. Siedząc w baza1 nie mogę zrobić "SELECT * FROM baza2.tabela2". Wywala błąd: parse error at or near "."
GeoS
Troche namieszales. Piszac o MySQLu miales chyba na mysli dzialania na roznych tabelach i kolumnach jednej bazy :!:

PS Polecam kolejnego manuala:
http://www.postgresql.org/idocs/
i np. dokument:
http://www.postgresql.org/idocs/index.php?...orial-join.html biggrin.gif
dragossani
jednej bazy :?:

Miałem na myśli dokładnie to co napisałem. Jedno zapytanie do dwóch tabel w dwóch różnych bazach. Silnik ten sam, na tej samej fizycznie maszynie ale 2 bazy i w nich tabele i w nich pola. Zapytanie ma ciągnąć dane z obu. To jakiś problem?

Czytałem na liście dyskusyjnej postgresa, że pracują nad zapytaniami do zupełnie zdalnych baz. Coś w stylu: SELECT zdalna_baza.tabela.* FROM zdalna_baza(213.17.224.50,login,hasło)
Skoro takie są plany to zakładam, że dostęp do lokalnych baz już jest...
GeoS
Cytat
Skoro takie są plany to zakładam, że dostęp do lokalnych baz już jest...


To dokladnie oznacza jedno - takie sa plany biggrin.gif
dragossani
Hm, widzę że się nie rozumiemy. :?
Wejdź sobie do MySQLa. Stwórz sobie 2 bazy danych i w każdej z nich po jednej tabelce i trochę danych.
Przykładowy kod:
Kod
CREATE DATABASE baza1;

USE baza1;

CREATE TABLE tabela1 (id_tabela1 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value VARCHAR(40) NOT NULL);

INSERT INTO tabela1 (id_tabela1, value) VALUES (NULL, 'rekord numer [1] w [tabela1] w [baza1]');

INSERT INTO tabela1 (id_tabela1, value) VALUES (NULL, 'rekord numer [2] w [tabela1] w [baza1]');

INSERT INTO tabela1 (id_tabela1, value) VALUES (NULL, 'rekord numer [3] w [tabela1] w [baza1]');

CREATE DATABASE baza2;

USE baza2;

CREATE TABLE tabela2 (id_tabela2 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value VARCHAR(40) NOT NULL);

INSERT INTO tabela2 (id_tabela2, value) VALUES (NULL, 'rekord numer [1] w [tabela2] w [baza2]');

INSERT INTO tabela2 (id_tabela2, value) VALUES (NULL, 'rekord numer [2] w [tabela2] w [baza2]');

INSERT INTO tabela2 (id_tabela2, value) VALUES (NULL, 'rekord numer [3] w [tabela2] w [baza2]');

Następnie wydaj polecenie
Kod
USE baza1;

SHOW TABLES;

Zobaczysz, że widać tylko tabela1 - po prostu siedzisz w baza1. Możesz sobie wydać polecenie:
Kod
SELECT * FROM tabela1;
Normalka.
A teraz wydaj takie polecenie:
Kod
SELECT * FROM baza2.tabela2;
I co? Siedzisz w baza1 ale widzisz zawartość tabela2 z baza2. Jeszcze jeden przykład:
Kod
SELECT tabela1.*,tabela2.value FROM baza1.tabela1, baza2.tabela2 WHERE tabela1.id_tabela1=tabela2.id_tabela2;
. I jak? Zapytanie ciągnie dane z dwóch tabel w DWÓCH RÓŻNYCH bazach.

I teraz wróćmy do mojego pytania. Jak to zrobić w Postgresie?

PS. Te zdalne bazy na innych hostach to była taka dygresja.
GeoS
OK. Wszystko jest juz jasne biggrin.gif
dragossani
No w moim pytaniu mam nadzieję, że jasne.

Natomiast odpowiedzi ni widu ni słychu. Powiem szczerze, myślałem, że to banał... Ma ktoś na to koncepcję?
dragossani
Fragment z książki "Practical PostgreSQL":
Cytat
Byc może nie wszyscy wiedza, że system PostgreSQL może jednoczesnie zarzadzac kilkoma bazami danych, z których każda posiada swojego własciciela oraz zawiera unikalne tabele, widoki, wskazniki, sekwencje i funkcje.

W celu utworzenia tabeli, funkcji lub dowolnego innego obiektu bazy danych należy uzyskac połaczenie z konkretna baza danych poprzez klienta PostgreSQL. Po uzyskaniu połaczenia można utworzyc obiekt, który jest wówczas obiektem bazy, z która uzyskano połaczenie, a zatem jest niedostepny z jakiejkolwiek innej bazy danych (chociaż klient może posiadac otwarte połaczenia z kilkoma różnymi bazami danych).

Tworzac podstawowe obiekty bazodanowe w osobnych bazach danych zmniejsza sie ryzyko powstawania konfliktu nazw przy wybieraniu nazwy tabeli, która już wybrano w innym celu (na przykład gdy dwóch użytkowników chce wykorzystac w dwóch oddzielnych aplikacjach tabele nazywana products). Jest tak, ponieważ żadna z baz danych nie zawiera informacji o elementach innej bazy danych i nie podejmie próby utworzenia jakiegokolwiek zwiazku logicznego pomiedzy nimi. Ponadto, ponieważ ta sama zasada ma zastosowanie do obiektowo-relacyjnych obiektów danych, użytkownicy w swojej bazie danych moga nawet tworzyc funkcje i definicje jezyka, które sa niedostepne dla innych użytkowników połaczonych z innymi bazami danych działajacymi
w PostgreSQL.

Skoro w tak się przedstawia sytuacja, to jakim cudem MySQL umożliwia tak swobodne manewry, jak te, o których pisałem powyżej?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.