Skeemanhallinnan perusteiden ymmärtäminen on ratkaisevan tärkeää tehokkaan PostgreSQL-tietokannan rakentamisessa ja ylläpidossa. Tässä artikkelissa tarkastelemme perinteistä tapaa hallita Postgresin skeemaa ja uudempaa, tehokkaampaa tapaa tehdä se visuaalisesti ilman, että tarvitsee kirjoittaa yhtään koodiriviä.
Mikä on PostgreSQL-skeema?
Aluksi artikkelin pohjustamiseksi selvitetään hieman terminologiaa. Postgresissä skeemaa kutsutaan myös nimiavaruudeksi. Nimiavaruuteen voidaan liittää sukunimi. Sitä käytetään tiettyjen tietokannan objektien (taulut, näkymät, sarakkeet jne.) tunnistamiseen ja erottamiseen toisistaan. Samassa skeemassa ei saa luoda kahta samannimistä taulua, mutta kahdessa eri skeemassa se on mahdollista. Meillä voi esimerkiksi olla kaksi taulukkoa, joiden molempien nimi on table1 ja jotka ovat sekä public- että postgres-skeemoissa.
Miksi käyttää skeemoja?
Skeemat ovat erittäin käyttökelpoisia, kun tietokantaobjekteja järjestetään loogisiin ryhmiin ja vältetään nimikolari. Tämän lisäksi skeemoja käytetään usein, jotta eri käyttäjät voivat työskennellä tietokannan kanssa häiritsemättä toisiaan. Yleinen esimerkki on, kun kukin tietokannan käyttäjä työskentelee omalla skeemallaan häiritsemättä muita käyttäjiä ja välttäen ristiriitoja.
Klassinen tapa hallita PostgreSQL-skeemoja
Kaikki alla olevat kyselyt suoritetaan PostgreSQL:n komentotulkin sisältä.
Skeeman luominen
Kun luodaan uusi tietokanta Postgresiin, oletusarvoisesti skeema on julkinen. Uusi skeema voidaan luoda suorittamalla seuraava kysely:
CREATE SCHEMA schema_1;
selitän kaksi tärkeää käsitettä: Kvalifioidut ja kvalifioimattomat nimet.
-
Kvalifioitu nimi on skeeman nimi ja taulukon nimi pisteellä erotettuna. Tällä määritetään skeema, johon haluamme luoda taulukkomme:
CREATE TABLE schema_name.table_name (...);
-
Kvalifioimaton nimi koostuu vain taulukon nimestä. Tämä luo taulukon valittuun tietokantaan, joka on oletusarvoisesti julkinen. Tätä voidaan muuttaa hakupolun (search_path) avulla, mutta kerromme siitä tarkemmin myöhemmin. Esimerkki kvalifioimattomasta nimestä on:
CREATE TABLE table_name (...);
Luoaksemme uuden taulukon uuteen skeemaamme, suoritamme:
.
CREATE TABLE schema_1.persons (name text, age int);
meillä on kaksi mahdollisuutta. Jos skeema on tyhjä (ei sisällä yhtään taulua, näkymää tai muuta objektia), voimme suorittaa:
DROP SCHEMA schema_1;
lisäämme cascade-komennon:
xxxxxxxxxx
DROP SCHEMA schema_1 CASCADE;
PostgreSQL:ssä on myös mahdollista luoda skeema, jonka omistaa joku toinen käyttäjä:
xxxxxxxxxx
Hakupolku
Komennon suorittaminen määrittelemättömällä nimellä, Postgres seuraa hakupolkua määrittääkseen käytettävät skeemat. Oletusarvoisesti hakupolku on asetettu julkiseen skeemaan. Voit tarkastella sitä suorittamalla:
xxxxxxxxxx
SHOW search_path;
tämän kyselyn pitäisi tuoda seuraava tulos:
--------------
"$user",public
Haun_polkua voidaan muuttaa niin, että järjestelmä valitsee automaattisesti toisen skeeman, jos käytät määrittelemätöntä nimeä. Hakupolun ensimmäistä skeemaa kutsutaan nykyiseksi skeemaksi. Asetan esimerkiksi schema_1:n nykyiseksi skeemaksi:
xxxxxxxxxx
SET search_path TO schema_1,public;
xxxxxxxxxx
CREATE TABLE address (city text, street text, number int);
Uusi tie:
On olemassa yksinkertaisempi tapa tehdä kaikki skeemanhallintatehtävät ilman, että tarvitsee kirjoittaa yhtään riviä koodia. DbScheman avulla voit suorittaa kaikki edellä mainitut kyselyt intuitiivisesta graafisesta käyttöliittymästä muutamalla klikkauksella. Yhteyden muodostaminen tietokantaan vie vain muutaman sekunnin. Voit alusta alkaen valita, millä skeemalla haluat työskennellä.
DbSchema kääntää valitun skeeman tai valitut skeemat ja näyttää ne ulkoasussa.
Luo uusi skeema napsauttamalla hiiren kakkospainikkeella vasemmanpuoleisessa valikossa olevaa skeemakansiota ja valitsemalla Create Schema.
Luo uusi taulukko skeemaan napsauttamalla hiiren kakkospainikkeella asettelua ja valitsemalla Create Table.
Skeema voidaan poistaa napsauttamalla sen nimeä hiiren kakkospainikkeella vasemmanpuoleisessa valikossa.
Toisen skeeman lisääminen tietokannasta tapahtuu valitsemalla Päivitä tietokannasta.
Käyttämällä DbSchemaa sinun ei tarvitse käyttää show_path-syntaksia, koska voit luoda taulut suoraan asettelussa. Layoutia voi verrata piirustuspöytään, johon voit lisätä taulukoita ja muokata niitä. Jokaiseen layoutiin liittyy yksi skeema, joten jos olet schema_1-layoutissa, taulut luodaan automaattisesti sinne.
Työ offline
DbSchema tallentaa paikallisen kuvan skeemasta paikalliseen projektitiedostoon. Tämä tarkoittaa, että projektitiedosto voidaan avata ilman tietokantayhteyttä (offline). Offline-tilassa voit tehdä kaikki edellä esitetyt toiminnot ja paljon muuta, mutta ilman tietoja. Kun yhteys tietokantaan on muodostettu uudelleen, voit verrata projektitiedostoa tietokantaan ja valita, mitkä toimet säilytetään tai poistetaan.
Sama voidaan tehdä saman projektitiedoston kahden eri version välillä. Jos työskentelet esimerkiksi tiimissä, voi olla, että käytössä on useita skeemoja (tuotanto-, testaus- ja kehitysskeema), joista jokaisella on oma projektitiedostonsa. Jos kehitysversioon tulee muutos ja haluat toteuttaa sen kahdessa muussa skeemassa, voit vain verrata ja synkronoida nämä kaksi projektitiedostoa.
Johtopäätös
Yllä lueteltujen käsitteiden ymmärtäminen auttaa sinua hallitsemaan PostgreSQL-skeemojasi helposti. DbScheman kaltaisen visuaalisen suunnittelijan käyttäminen helpottaa työtäsi entisestään, koska voit tehdä kaiken visuaalisesti ilman, että sinun tarvitsee kirjoittaa yhtään riviä koodia.