10 Harjoitus 9: PostgreSQL:n ylläpito
Harjoituksen sisältö - PostgreSQL:n ylläpitoon liittyviä aiheita.
Harjoituksen tavoite - Opiskelija tuntee PostgreSQL:n ylläpitoon liittyviä perusasioita.
10.0.1 Valmistautuminen
Avaa pgAdmin selaimeen ja kirjaudu sisään. Avaa Query Tool (Valitse trainingdatabase -> Ylhäältä Tools -> Query Tool).
10.1 Harjoitus 9.1: Taulutilat
Tarkista koulutuspalvelimen oletustaulutilojen sijainti. Käyttäjien tiedot sijaitsevat pg_default-taulutilassa, joka on data_directoryn base-hakemistossa. Järjestelmän yleiset tiedot sijaitsevat pg_global-taulutilassa, joka on data_directoryn global-hakemistossa. Datahakemiston sijainnin voit tarkistaa komennolla:
SHOW data_directory;10.2 Harjoitus 9.2: Käyttäjäroolit
Oletusarvoisesti PostgreSQL:ään luodaan postgres-niminen rooli ja samanniminen tietokanta. Aiemmin harjoituksissa on luotu koulutusta varten tietokanta (trainingdatabase). Voit luoda uuden käyttäjän tietokantapalvelimeen seuraavalla SQL-komennolla:
DROP ROLE IF EXISTS matti;
CREATE ROLE
matti
LOGIN PASSWORD
'1234'
CREATEDB
VALID UNTIL
'infinity';CREATEDB-parametri määrittää roolille oikeudet tietokantojen luomiseen. VALID-parametri määrittää roolin voimassaolon ajan (tässä tapauksessa ikuisesti).
Luo uusi ylläpitäjän rooli seuraavalla SQL-komennolla:
DROP ROLE IF EXISTS dba;
CREATE ROLE
dba
LOGIN PASSWORD
'1234'
SUPERUSER
VALID UNTIL
'2024-1-1 00:00';Uudella roolilla on ylläpitäjän oikeudet (SUPERUSER) ja se on voimassa 1. tammikuuta 2024 asti. Voit tarkastella käyttäjien tietoja pgAdminin puuhierarkian kohdassa Login/Group Roles.
10.3 Harjoitus 9.3: Ryhmäroolit
Ryhmäroolit (group roles) luodaan seuraavalla SQL-komennolla:
DROP ROLE IF EXISTS admins;
CREATE ROLE
admins
INHERIT;INHERIT-parametri tarkoittaa sitä, että kaikki our_admins-ryhmän sisällä olevat roolit perivät ryhmän oikeudet. Poikkeuksena, superuser-oikeus ei koskaan periydy PostgreSQL:ssä.
Lisää roolit matti ja dpa ryhmään admins seuraavasti:
GRANT
admins
TO
matti, dba;Voit vaihtaa rooleja komennolla SET ROLE:
SET ROLE
matti;Käytössä olevan roolin voi tarkistaa komennolla:
SELECT current_user;Kokeile komentoa SELECT session_user.
SELECT ...Mikä on current_user ja session_user välinen ero?
10.4 Harjoitus 9.4: Roolien lisääminen käyttöliittymässä

Roolien hallinta on selkeämpää pgAdminin käyttöliittymässä. Lisää uusi käyttäjä, valitse salasana ja lisää hänet myös admins-ryhmärooliin, huomaa SQL-välilehdelle muodostuva SQL-lauseke. Roolien poistaminen tapahtuu DROP ROLE < roolin nimi > -komennolla.
10.5 Harjoitus 9.5: Uuden taulutilan luominen
Uutta taulutilaa varten pitää luoda ensin palvelimelle kansio. Kansion tulee olla postgres-käyttäjän omistuksessa ja käyttöoikeudet vain postgres-käyttäjälle. Hakemisto on luotu valmiiksi palvelimelle komennoilla:
sudo mkdir /usr/local/tmp_tbls
sudo chown -R postgres:postgres /usr/local/tmp_tbls/
sudo chmod 700 /usr/local/tmp_tbls/
Luo uusi taulutila SQL-komennolla psql:n tai pgAdminin avulla:
CREATE TABLESPACE tmp_tablespace
LOCATION '/usr/local/tmp_tbls';10.6 Harjoitus 9.6: Tietokannan ja taulun taulutilan muuttaminen
Koko tietokannan taulutilan voi muuttaa yhdellä komennolla.
HUOM! Tätä ei kuitenkaan voi tehdä jos tietokantaan on auki aktiivisia yhteyksiä!
- Sulje pgAdminin tietokantayhteys harjoitustietokantaasi klikkaamalla tietokantaa sivupaneelissa hiiren oikealla painikkeella ja valitsemalla Disconnect Database.
- Avaa tämän jälkeen sivupaneelista postgres-tietokanta ja avaa Query tool (voit tehdä tämän myös psql:n avulla). Anna komento:
ALTER DATABASE trainingdatabase
SET TABLESPACE tmp_tablespace;Mikäli tämä ei onnistu, ja pgAdmin4 kertoo, että tietokantaan on aktiivisia yhteyksiä, yritä kirjautua ulos ja takaisin sisään pgAdminiin.
Voit tarkistaa tietokannan taulutilan sijainnin SQL-kyselyllä:
SELECT
spcname, pg_tablespace_location(oid)
FROM
pg_tablespace;Luo testausta varten tilapäinen taulu:
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
SELECT x
FROM
generate_series(2,5000,2) AS x;Taulun käyttämän taulutilan voit tarkistaa seuraavalla komennolla:
SELECT
tablename, tablespace
FROM
pg_tables
WHERE
tablename = 'tmp_table';Muuta taulun taulutilaa seuraavalla komennolla:
ALTER TABLE
tmp_table
SET TABLESPACE
tmp_tablespace;Tarkista, että taulun taulutila on nyt muuttunut. Voit myös käyttää pgAdminin käyttöliittymää taulutilojen tarkastamiseen.
10.7 Harjoitus 9.7: Indeksin taulutilan muuttaminen
Voit luoda indeksin tauluun komennolla:
CREATE INDEX
idx_tmp_x
ON tmp_table(x);Indeksit luodaan oletusarvoisesti pg_default-taulutilaan. Usein käytetyt indeksit voi olla tarpeen tallentaa sellaiseen taulutilaan, joka käyttää palvelimessa olevaa nopeinta levyä (esimerkiksi SSD-levyt). Indeksien taulutilan muuttaminen onnistuu seuraavasti:
ALTER INDEX
idx_tmp_x
SET TABLESPACE
tmp_tablespace;