2013-10-02 14 views
7

Pracuję nad projektem, który musi używać hstore na wielu schematach. Schemat "publiczny", w którym instalowano rozszerzenie hstore, nie jest dostępny wszędzie, ponieważ mój zakres nie jest "publiczny". W niektórych tryoutach utworzyłem rozszerzenie na schemacie o nazwie "hstore" i użyłem schematu na każdej dostępnej osłonie (ścieżce wyszukiwania).Najlepszy sposób na zainstalowanie hstore na wielu schematach w bazie danych Postgres?

Na tej podstawie mam kilka pytań:

  • Czy to jest ok aby utworzyć schemat tylko do rozszerzenia? A może lepiej utworzyć rozszerzenie na każdym schemacie (np. customer_1, customer_2 itd.)?

  • Czy utworzenie rozszerzenia w oddzielnym schemacie wpływa na miejsce przechowywania danych? Używam wielu schematów, aby ułatwić tworzenie kopii zapasowych/przywracania i naprawdę nie chcę, aby pg przechowywał wszystkie moje dane hstore w ukrytej tabeli (na przykład pg_large_objects dla obiektów BLOB) w jednym schemacie.

Odpowiedz

6

Nie można instalować rozszerzeń kilka razy w jednej bazie danych. Cytowanie the manual on CREATE EXTENSION:

Pamiętaj, że samo rozszerzenie nie jest uważany za w jakimkolwiek schemacie : Rozszerzenia mają niekwalifikowanych nazw, które muszą być unikalne bazy szerokości. Ale obiekty należące do rozszerzenia mogą znajdować się w ramach schematów.

Jeśli nie chcesz dołączyć public w swojej search_path zainstalować rozszerzenia „publiczne” w specjalnym schemacie (na przykład: extensions). Dla każdego z nich użyłbym pojedynczego schematu, a nie osobnego schematu dla każdego rozszerzenia. There are quite a few of them. CREATE EXTENSION oferuje możliwość zainstalowania do istniejącego schematu swojego wyboru:

CREATE EXTENSION hstore SCHEMA extensions; 

I upewnij się, że schemat jest zawarty w search_path użytkowników, którzy chcą z niego skorzystać.

przechowywanie danych nie wpływa w ogóle przez schematu rozszerzenie zamieszkuje.

+0

W 'rozszerzeń 'schemat musi być dodany do search_path, prawda? – Qcom

+1

@Qcom: Prawidłowo. Również sekwencja schematów w ścieżce wyszukiwania jest istotna. * Lub * musisz do schematu - zakwalifikować wszystkie obiekty, które chcesz odwołać - w tym operatorów! Szczegóły: http://stackoverflow.com/questions/22975599/how-to-use-operator--the-extension-pg-trgm/22975642#22975642 –

+0

Czy istnieją jakieś oczywiste zalety poza jasnością w instalacji rozszerzeń w dedykowanym schematu, a nie publicznego? – Qcom

0

Spróbuj zainstalować rozszerzenie hstore wszystkich schematów

create extension hstore schema pg_catalog; 
+0

Nie sądzę, że dobrym pomysłem jest przechowywanie rzeczy innych niż podstawowe w 'pg_catalog' –

Powiązane problemy