Stare vs nowe: Podejście do zarządzania schematami PostgreSQL

Zrozumienie podstaw zarządzania schematami jest kluczowe dla budowania i utrzymywania efektywnej bazy danych PostgreSQL. W tym artykule przyjrzymy się tradycyjnemu sposobowi zarządzania schematem Postgresa oraz nowszemu, bardziej efektywnemu sposobowi, aby zrobić to w sposób wizualny, bez konieczności pisania jakiejkolwiek linijki kodu.

Co to jest schemat PostgreSQL?

Na początek, aby przygotować grunt pod artykuł, wyjaśnijmy sobie pewną terminologię. W Postgres, schemat jest również określany jako przestrzeń nazw. Przestrzeń nazw może być powiązana z nazwą rodziny. Jest on używany do identyfikacji i rozróżniania pewnych obiektów w bazie danych (tabel, widoków, kolumn, itp.). Nie jest dozwolone tworzenie dwóch tabel o tej samej nazwie w jednym schemacie, ale można to zrobić w dwóch różnych schematach. Na przykład, możemy mieć dwie tabele o nazwie table1 obecne w schemacie public i postgres.

Dlaczego warto używać schematów?

Schematy są bardzo przydatne do organizowania obiektów bazy danych w logiczne grupy i unikania kolizji nazw. Poza tym, schematy są często używane, aby umożliwić różnym użytkownikom pracę z bazą danych bez wzajemnego zakłócania się. Typowym przykładem jest sytuacja, w której każdy użytkownik bazy danych pracuje na swoim własnym schemacie, nie przeszkadzając innym użytkownikom i unikając konfliktów.

Klasyczny sposób zarządzania schematami PostgreSQL

Wszystkie poniższe zapytania zostaną wykonane z poziomu powłoki PostgreSQL.

Tworzenie schematu

Gdy tworzysz nową bazę danych w Postgres, domyślnym schematem jest publiczny. Nowy schemat może zostać utworzony poprzez wykonanie poniższego zapytania:

SQL

.

x

Przed dodaniem do niego kilku tabel, wyjaśnię dwa ważne pojęcia: nazwy kwalifikowane i niewykwalifikowane.

  • Nazwa kwalifikowana to nazwa schematu i nazwa tabeli oddzielone kropką. Określa ona schemat, w którym chcemy utworzyć naszą tabelę:

SQL

.

xxxxxxxxxx
1

1

CREATE TABLE schema_name.table_name (...);

  • Nazwa bez zastrzeżeń składa się tylko z nazwy tabeli. Spowoduje to utworzenie tabeli w wybranej bazie danych, która domyślnie jest publiczna. Można to zmienić za pomocą search_path, ale szczegóły na ten temat podamy później. Przykładem niewykwalifikowanego nazewnictwa jest:

SQL

.

xxxxxxxxxx
1

Kolumny tabel zostaną zdefiniowane wewnątrz nawiasów z zapytań powyżej (…).

Aby utworzyć nową tabelę w naszym nowym schemacie, wykonamy:

SQL

.

xxxxxxxxxx
1

1

CREATE TABLE schema_1.persons (name text, age int);

Aby porzucić schemat, mamy dwie możliwości. Jeśli schemat jest pusty (nie zawiera żadnej tabeli, widoku, ani innych obiektów), możemy wykonać:

SQL

.

xxxxxxxxxx
1

Jeśli schemat zawiera obiekty bazy danych, wstawimy polecenie kaskadowe:

SQL

.

xxxxxxxxxx
1

1

DROP SCHEMA schema_1 CASCADE;

W PostgreSQL możliwe jest również utworzenie schematu będącego własnością innego użytkownika z:

SQL

.
xxxxxxxxxx
1

1

CREATE SCHEMA schema_name AUTHORIZATION username;

Ścieżka wyszukiwania

Podczas wykonywania polecenia o niewykwalifikowanej nazwie, Postgres podąża ścieżką wyszukiwania, aby określić, jakich schematów użyć. Domyślnie ścieżka wyszukiwania ustawiona jest na schemat publiczny. Aby go wyświetlić, wykonaj:

SQL

.

xxxxxxxxxx
1

Jeśli nic nie zostało zmienione w Twojej bazie danych, to zapytanie powinno przynieść następny wynik:

SQL

.

xxxxxxxxxx
1

1

 search_path

2

--------------

3

 "$user",public

4


Ścieżkę wyszukiwania można zmodyfikować tak, aby system automatycznie wybierał inny schemat w przypadku użycia niewykwalifikowanej nazwy. Pierwszy schemat na ścieżce wyszukiwania nazywany jest aktualnym schematem. Na przykład, ustawię schemat_1 jako aktualny schemat:

SQL

.

xxxxxxxxxx
1

1

SET search_path TO schema_1,public;

Kolejne zapytanie użyje niewykwalifikowanej nazwy do utworzenia tabeli. Spowoduje to automatyczne utworzenie jej w schema_1:

SQL

.

xxxxxxxxxx
1

1

CREATE TABLE address (city text, street text, number int); 

Nowa Droga: Manage Without The Code!

Istnieje prostszy sposób na wykonanie wszystkich zadań związanych z zarządzaniem schematami, bez konieczności pisania jakiejkolwiek linii kodu. Używając DbSchema możesz wykonać wszystkie powyższe zapytania z intuicyjnego GUI za pomocą zaledwie kilku kliknięć. Nawiązanie połączenia z bazą danych zajmie tylko kilka sekund. Od początku możesz wybrać, na jakim schemacie chcesz pracować.

Wybrany schemat lub schematy zostaną odwzorowane przez DbSchema i pokazane w układzie.

Aby utworzyć nowy schemat wystarczy kliknąć prawym przyciskiem myszy na folderze schematów w lewym menu i wybrać Utwórz schemat.

Aby utworzyć nową tabelę w schemacie kliknij prawym przyciskiem myszy na układzie i wybierz Utwórz tabelę.

Schemat można usunąć klikając prawym przyciskiem myszy na jego nazwę z lewego menu.

Aby dodać kolejny schemat z bazy danych wybierz Odśwież z bazy danych.

Używając DbSchema, nie będziesz musiał używać składni show_path, ponieważ możesz tworzyć tabele bezpośrednio w layoucie. Układ można porównać do deski kreślarskiej, na której możesz dodawać tabele i je edytować. Każdy layout posiada jeden schemat z nim związany, więc jeśli znajdujesz się na layoucie schema_1, tabele zostaną automatycznie utworzone w tym layoucie.

Praca offline

DbSchema przechowuje lokalny obraz schematu w lokalnym pliku projektu. Oznacza to, że plik projektu może być otwarty bez połączenia z bazą danych (offline). W trybie offline możesz wykonać wszystkie czynności przedstawione powyżej i więcej, ale bez danych. Po ponownym podłączeniu do bazy danych można porównać plik projektu z bazą danych i wybrać, które akcje zachować lub porzucić.

To samo można zrobić między dwiema różnymi wersjami tego samego pliku projektu. Na przykład, jeśli pracujesz w zespole, może się zdarzyć, że istnieje wiele schematów (produkcja, testowanie, rozwój), z których każdy ma swój własny plik projektu. Jeśli zmiana pojawi się w wersji rozwojowej i chcesz ją zaimplementować w pozostałych dwóch schematach, możesz po prostu porównać i zsynchronizować oba pliki projektu.

Zakończenie

Zrozumienie powyższych pojęć pomoże Ci w łatwy sposób zarządzać schematami PostgreSQL. Użycie wizualnego projektanta, takiego jak DbSchema, jeszcze bardziej ułatwi Ci pracę, umożliwiając wykonanie wszystkiego wizualnie, bez konieczności pisania choćby jednej linijki kodu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.