2012-06-15 22 views
9

Opracowałem aplikację przy użyciu PostgreSQL i działa dobrze.za pomocą schematów w postgresql

Teraz muszę utworzyć kilka wystąpień tej samej aplikacji, ale mam tylko jedną bazę danych. Zastanawiam się więc nad używaniem schematów, dzięki czemu mogę grupować tabele każdej instancji w innym schemacie.

Teraz nie chciałbym przepisać wszystkich moich funkcji i skryptu, dlatego zastanawiam się, czy mogę po prostu użyć jakiejś dyrektywy, aby polecić bazy danych działanie na określonym schemacie. Wystarczy spróbować, aby uczynić go bardziej przejrzyste, wiesz, kiedy w C++ zrobić

using namespace std; 

tak, że można użyć cout zamiast std::cout? Chciałbym użyć czegoś podobnego, jeśli to możliwe.

+2

W skryptach SQL można użyć 'set schema 'schemaname';' a wszystkie niekwalifikowane nazwy tabel/widoków odwołają się do schematu 'schemaname'. Zobacz http://www.postgresql.org/docs/9.1/static/sql-set.html. –

+0

czy wiesz, czy mogę go używać również z python psycopg? I czy dotyczy to tylko bieżącego połączenia, czy też innych, które mogą działać z bazą danych? –

+2

'set session schema 'name'', zgodnie z docs" Określa, że ​​polecenie działa dla bieżącej sesji (jest to ustawienie domyślne, jeśli nie pojawia się ani SESSION, ani LOCAL.) ". Nie mogę ci teraz powiedzieć, czy działa dla psycopg - prawdopodobnie tak. –

Odpowiedz

14

Parametr szukasz jest search_path - które wymienia schematy zapytanie będzie wyglądać tak, można zrobić coś takiego:.

CREATE TABLE schema1.tt ... 
CREATE TABLE schema2.tt ... 
CREATE FUNCTION schema1.foo() ... 
CREATE FUNCTION schema2.foo() ... 
SET search_path = schema1, something_else; 
SELECT * FROM tt;  -- schema1.tt 
SELECT * FROM schema2.tt -- schema2.tt 
SELECT foo();   -- calls schema1.foo 
SELECT schema2.foo(); -- calls schema2.foo 

pamiętać, że jeśli projekt kwerendy zostaje zapisany w ciele foo(), możesz uzyskać nieoczekiwane wyniki. Polecam zawsze jawnie wymieniać schematy tabel odniesionych w funkcjach plpgsql, jeśli używasz zduplikowanych tabel. Jeśli nie, upewnij się, że masz testy w celu sprawdzenia zachowania przy pomocy ścieżki wyszukiwania.

Oh - można jawnie ustawić również dla funkcji funkcji search_path - więcej informacji na ten temat znajduje się w instrukcji CREATE FUNCTION.

Powiązane problemy