Pri spracúvaní väčšieho množstva údajov vznikla už v minulosti potreba násť nejaký štandardný spôsob ako údaje usporiadať ukladať tak aby ich bolo možné ľahko triediť, jednoducho filtrovať, vyberať z nich nejakú podskupinu podľa určitého kritéria atď. Praktické riešenie týchto požiadaviek priniesli počítačové databázy. Z viacerých databázových modelov sa v praxi ujal model relačnej databázy. Okrem spracovania textových tabuľkových údajov sa vďaka rozšíreniam dajú v súčasnosti do databáz ukladať aj vektorové údaje -- spôsob ich ukladania do databáz bol dokonca štandardizovaný OpenGIS konzorciom. Cieľom cvičení z predmetu Databázy GIS bude na precvičiť si na praktických príkladch návrh, prípravu a založenie databázy, návrh dopytov na databázu a tvorbu užívateľského rozhrania k databáze.
Text je rozdelený do šiestich častí a je doplnkom k 6 dvojhodinovým cvičeniam.
Nasledujúci postup sa vzťahuje na inštaláciu PotgreSQL verzie 8.2.x na operačný systém MS Windows XP (v prípade inej verzie databázy alebo operačného systému sa postup môže mierne líšiť.
Na to aby databázový systém fungoval je potrebné v systéme Windows nastaviť cesty do adresárov pgsql/lib a pgsql/bin. možno to urobiť dočasne z príkazového riadku (Command prompt) nasledujúcim príkazom:
PATH=%PATH%;D:\studenti\pgsql\lib;D:\studenti\pgsql
Pred vytvorením samotnej databázy je potrebné inicializovať databázový systém. Týmto krokom sa v nami určenom adresári vytvoria konfiguračné súbory a pripraví sa tak prostredie pre vytvorenie samotnej databázy. Na inicializáciu sa využíva program initdb s parametrom -D (za parametrom sa uvádza cesta k adresáru v ktorom budú ukladané údaje a konfiguračné súbory.
Inicializácia by mala prebehnúť nasledujúcim spôsobom
D:\initdb.exe -D D:\studenti\pgsql\data The files belonging to this database system will be owned by user "student". This user must also own the server process. The database cluster will be initialized with locale Slovak_Slovakia.1250. The default database encoding has accordingly been set to WIN1250. initdb: could not find suitable text search configuration for locale Slovak_Slov akia.1250 The default text search configuration will be set to "simple". fixing permissions on existing directory D:/studenti/pgsql/data ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers/max_fsm_pages ... 32MB/204800 creating configuration files ... ok creating template1 database in D:/studenti/pgsql/data/base/1 ... ok initializing pg_authid ... ok initializing dependencies ... ok creating system views ... ok loading system objects' descriptions ... ok creating conversions ... ok creating dictionaries ... ok setting privileges on built-in objects ... ok creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok copying template1 to postgres ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: "postgres" -D "D:/studenti/pgsql/data" or "pg_ctl" -D "D:/studenti/pgsql/data" -l logfile start
Na to aby sme mohli vytvoriť databázu alebo pracovať s databázou už jestvujúcou je potrebné spustenie databázového systému. Na zapínanie, vypínanie a reštart databázového systému slúži príkaz pg_ctl. Cez parameter -D je potrebné uviesť cestu k adresáu určenému pre údaje databázy. Povinným parametrom je akcia ktorú má pg_ctl vykonať. Povolené hodnoty sú start (zapnutie systému), stop (vypnutie), restart (reštart).
Úspešné zapnutie systému by malo vyzerať nasledovne:
D:\pg_ctl.exe -D D:\studenti\pgsql\data start server starting LOG: database system is ready to accept connections LOG: autovacuum launcher started
Novú databázu vytvoríme príkazom createdb. Ako parameter treba uviesť názov novej databázy. Vytvorenie databázy test prebehne nasledovne:
D:\createdb.exe test
Databázu odstraňujeme príkazom dropdb. Syntax je rovnaká ako pri createdb.
Pracovať s databázou pomocou jazyka SQL možno viacerými spôsobmi. Najjedoduchšie je použiť textovú konzolu psql. Parametrom je názov databázy ku ktorej sa pripája. Okrem príkazov jazyka SQL možno využiť aj interné príkazy konzoly ktoré sa zadaávajú cez spätnú lomku. Ich zoznam získame cez \h
D:\studenti\pgsql\bin>psql.exe test Welcome to psql 8.2.6, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit Warning: Console code page (852) differs from Windows code page (1250) 8-bit characters might not work correctly. See psql reference page "Notes for Windows users" for details. ^ test=# test=# \q
Na vytvorenie novej tabuľky sa využíva v jazyku SQL príkaz CREATE TABLE. Nasledujúci príkaz vytvorí novú tabuľku "zamestnanci" ktorá bude obsahovať stĺpce id, meno, priezvisko. Za stĺpcom sa uvádza typ údajov -- int4 je 4 bytový integer (celé číslo), varchar(cislo) je reťazec s premennou dĺžkou nšepresahujucou dlzku uvedenu v zatvorke (pocet znakov)
test=# CREATE TABLE zamestnanci (id int4,meno varchar(50),priezvisko varchar(50)); CREATE TABLE test=#
Príkazy jazyka SQL by sa mali písať veľkými písmenami (nie je to povinné, ale je to zaužívaná konvencia). Ksaždý príkaz sa vykoná len ak je ukončený bodkočiarkou. V opačnom prípade sa očakáva ďalší vstup.
Údaje do tabuliek sa vkladajú príkazom INSERT INTO nazov_tabulky VALUES ('hodnota_1_atributu', 'hodnota_2_atributu', 'hodnota_3_atributu'). Číselné hodnoty sa nemusia uzatvárať do apostrofov, všetky ostatné hodnoty však áno.
test=# INSERT INTO zamestnanci VALUES ('1','Adam','Šangala'); INSERT 0 1 test=# INSERT INTO zamestnanci VALUES ('2','Maco','Mlieč'); INSERT 0 1 test=# INSERT INTO zamestnanci VALUES ('3','Juraj','Jánošík'); INSERT 0 1
Na tvorbu dopytov slúži príkaz SELECT. Napr.
test=# SELECT * FROM zamestnanci; id | meno | priezvisko ----+------+------------ 1 | Adam | Šangala (1 row)
Požadované údaje možno bližšie určiť cez kluzulu WHERE za ktorou nasleduje podmienka, ktorej budú vyhovovať všetky vrátené záznamy – napríklad:
test=# SELECT * FROM zamestnanci WHERE id=2; id | meno | priezvisko ----+-------+------------ 2 | Maco | Mlieč (1 row) test=# SELECT * FROM zamestnanci WHERE id>1; id | meno | priezvisko ----+--------+------------ 2 | Maco | Mlieč 3 | Juraj | Jánošík (2 rows)
SELECT nieco, (jeden_atr*druhy_atr)/2 AS priemer_atr) FROM TABLE teploty; Operátory spájajúce podmienky DISTINCT
SELECT * from tab1,tab2 WHERE atr_tab1=atr_tab2; Adresovanie stlpcov tabuliek tab1.atr2 tab2.atr3 SLECT * from tab1 INNER JOIN tab2 ON tab1.atr1=tab2.atr1 relablovanie SELECT kost FROM chladnicka CHLL; select max(id) from tabulka; zlozeny select; select from nieco where stlpec=(select max(a) from b);
D:\studenti\pgsql\bin>createlang.exe plpgsql test D:\studenti\pgsql\bin>psql test -f D:\studenti\pgsql\share\contrib\lwpostgis.sql D:\studenti\pgsql\bin>psql test -f D:\studenti\pgsql\share\contrib\spatialreferences.sql