Norskspråklig kortfattet introduksjon til PostgreSQL
Citation preview
1. Bli kjent med Bergen Linux User Group, 24. februar 2005
Oddbjrn Steffensen, IT Drift
2. Bakgrunn for presentasjonen Dette er ikke... en introduksjon
til relasjonsdatabaser eller SQL en uttmmende tutorial rundt
PostgreSQL, mer en appetittvekker PostgreSQL vs. mySQL vs. Oracle
vs. ... Jeg er... ingen PostgreSQL-ekspert ingen (god) DBA ganske
patetisk mhp. SQL Presenterer som en fornyd bruker samme
wow-flelsen som da jeg konverterte til FreeBSD i 1996 etter 3-4 r
med Linux-bruk... Hvorfor n? Versjon 8.0 er akkurat lansert!
3. Agenda 1. Bakgrunn 3+6 slides 2. Praktisk bruk av PostgreSQL
22 slides 3. Egenskaper 24 slides 4. PostgreSQL bak kulissene 22
slides 5. Replikeringslsninger 4 slides 6. Bruk av PostgreSQL fra
ulike sprk 15 slides 7. Tredjepartsverkty 6 slides 8. Hvordan komme
i gang! 11 + 3 slides ~45 minutter 10 minutter pause ~45 minutter
nn minutter med sprsml og muligens svar
4. PostgreSQL: Bakgrunn
5. Hva er PostgreSQL? PostgreSQL er en: avansert fritt
tilgjengelig open source relasjonsdatabaseserver Sttter mye av
SQL-standarden + avanserte egenskaper: Komplekse sprringer (bla.
subselects) Fremmednkler Triggere Views Transaksjonsintegritet
(ACID) Multiversion concurrency control (MVCC) BSD-lisens (gjr hva
du vil, men ikke skyld p oss)
6. Bakgrunn for PostgreSQL Fra INGRES til POSTGRES: 1977-1994
Michael Stonebraker, professor ved UC @ Berkeley fra 1971 Utviklet
INGRES fra 1977 Proof-of-concept databasemotor for
relasjonsdatabaser Michael Stonebraker Selskapet Ingres etbl. i
1980 for kommersialisere forskningen Oppkjpt av CA i 1994, som
opensourcet CA Ingres hsten 2004 Jobbet videre med POSTGRES fra
1986 En viderefring av INGRES med fokus p objektorientering / Quel
Kodebasen fra INGRES ble ikke viderefrt Kommersialisert som
Illustra (kjpt av Informix, kjpt av IBM) Fra POSTGRES til
PostgreSQL: 1994-1996 SQL-sttte lagt til i 1994, lansert som
Postgres95 i 1995 1977-1985 INGRES 1977-1985 INGRES Relansert som
PostgreSQL 6.0 i 1996 1986-1994 POSTGRES 1986-1994 POSTGRES
1994-1995 Postgres95 1994-1995 Postgres95 Etablering av PostgreSQL
Global Development Team 1996- PostgreSQL 1996- PostgreSQL
7. PostgreSQL Global Developments Team Thomas Lockhart Jolly
Chen Vadim Mikheev Jan Wieck Andrew Yu Tom Lane Bruce Momjian Marc
Fournier
8. PostgreSQL utviklingsmetodikk Kjerneteam (a la FreeBSD)
Kildekoden i CVS (a la FreeBSD) http://developer.postgresql.org/
Egne mailingliste for utviklerne Todo-liste Developer's FAQ
Beta-versjoner av PostgreSQL + dokumentasjon Presentasjoner
Web-grensesnitt mot CVS Patcher som venter p legges inn Oversikt
over innrapporterte bugs
11. Installasjon av PostgreSQL FreeBSD: # cd
/usr/ports/databases/postgresql80-server # sudo make install
distclean # cd /usr/ports/databases/postgresql80-client # sudo make
install distclean # cd /usr/ports/databases/postgresql-docs # sudo
make install distclean
======================================================================
To initialize the database, you should run initdb as the
quot;pgsqlquot; user. Example: su -l pgsql -c initdb You can then
start PostgreSQL by running: /usr/local/etc/rc.d/010.pgsql.sh start
For postmaster settings, see ~pgsql/data/postgresql.conf For more
tips, read ~pgsql/post-install-notes
======================================================================
12. Initialisering av PostgreSQL pgsql@home> initdb The
files belonging to this database system will be owned by user
quot;pgsqlquot; This user must also own the server process. The
database cluster will be initialized with locale C. creating
directory /usr/local/pgsql/data... ok creating directory
/usr/local/pgsql/data/base... ok creating directory
/usr/local/pgsql/data/global... ok creating directory
/usr/local/pgsql/data/pg_xlog... ok creating directory
/usr/local/pgsql/data/pg_clog... ok creating template1 database in
/usr/local/pgsql/data/base/1... ok creating configuration files...
ok initializing pg_shadow... ok enabling unlimited row size for
system tables... ok initializing pg_depend... ok creating system
views... ok loading pg_description... ok creating conversions... ok
setting privileges on built-in objects... ok creating information
schema... ok vacuuming database template1... ok copying template1
to template0... ok Success. You can now start the database server
using: /usr/local/pgsql//bin/postmaster -D /usr/local/pgsql/data or
/usr/local/pgsql//bin/pg_ctl -D /usr/local/pgsql/data -l logfile
start
13. Etablering av database oddbjorn@home ~> createdb demo
createdb: database creation failed: ERROR: permission denied to
create database oddbjorn@home ~> su - pgsql pgsql@home ~>
createdb demo CREATE DATABASE pgsql@home ~> psql demo Welcome to
psql 7.4.2, the PostgreSQL interactive terminal. Type: copyright
for distribution terms h for help with SQL commands ? for help on
internal slash commands g or terminate with semicolon to execute
query q to quit demo=# grant all on database demo to oddbjorn;
GRANT oddbjorn@home ~> psql demo Welcome to psql 7.4.2, the
PostgreSQL interactive terminal. Type: copyright for distribution
terms h for help with SQL commands ? for help on internal slash
commands g or terminate with semicolon to execute query q to quit
demo=>
14. psql: Den primre kommandolinjeklienten Usage: psql
[OPTIONS]... [DBNAME [USERNAME]] General options: -d DBNAME specify
database name to connect to (default: quot;oddbjornquot;) -c
COMMAND run only single command (SQL or internal) and exit -f
FILENAME execute commands from file, then exit -l list available
databases, then exit -v NAME=VALUE set psql variable NAME to VALUE
-X do not read startup file (~/.psqlrc) --help show this help, then
exit --version output version information, then exit Input and
output options: -a echo all input from script -e echo commands sent
to server -E display queries that internal commands generate -q run
quietly (no messages, only query output) -o FILENAME send query
results to file (or |pipe) -n disable enhanced command line editing
(readline) -s single-step mode (confirm each query) -S single-line
mode (end of line terminates SQL command) Output format options: -A
unaligned table output mode (-P format=unaligned) -H HTML table
output mode (-P format=html) -t print rows only (-P tuples_only) -T
TEXT set HTML table tag attributes (width, border) (-P tableattr=)
-x turn on expanded table output (-P expanded) -P VAR[=ARG] set
printing option VAR to ARG (see pset command) -F STRING set field
separator (default: quot;|quot;) (-P fieldsep=) -R STRING set
record separator (default: newline) (-P recordsep=) Connection
options: -h HOSTNAME database server host or socket directory
(default: quot;local socketquot;) -p PORT database server port
(default: quot;5432quot;) -U NAME database user name (default:
quot;oddbjornquot;) -W prompt for password (should happen
automatically)
15. psql: ? lister psqls interne kommandoer General
Informational c[onnect] [DBNAME|- [USER]] d [NAME] describe table,
index, sequence, or view connect to new database d{t|i|s|v|S}
[PATTERN] (add quot;+quot; for more detail) cd [DIR] change the
current working directory list
tables/indexes/sequences/views/system tables copyright show
PostgreSQL usage and distribution terms da [PATTERN] list aggregate
functions encoding [ENCODING] dc [PATTERN] list conversions show or
set client encoding dC list casts h [NAME] help on syntax of SQL
commands, * for all commands dd [PATTERN] show comment for object q
quit psql dD [PATTERN] list domains set [NAME [VALUE]] df [PATTERN]
list functions (add quot;+quot; for more detail) set internal
variable, or list all if no parameters dn [PATTERN] list schemas
timing toggle timing of commands (currently off) do [NAME] list
operators unset NAME unset (delete) internal variable dl list large
objects, same as lo_list ! [COMMAND] execute command in shell or
start interactive shell dp [PATTERN] list table access privileges
dT [PATTERN] list data types (add quot;+quot; for more detail)
Query Buffer du [PATTERN] list users e [FILE] edit the query buffer
(or file) with external editor l list all databases (add
quot;+quot; for more detail) g [FILE] send query buffer to server
(and results to file or z [PATTERN] list table access privileges
(same as dp) |pipe) p show the contents of the query buffer
Formatting r reset (clear) the query buffer a toggle between
unaligned and aligned output mode s [FILE] display history or save
it to file C [STRING] set table title, or unset if none w [FILE]
write query buffer to file f [STRING] show or set field separator
for unaligned query output H toggle HTML output mode (currently
off) Input/Output pset NAME [VALUE] echo [STRING] write string to
standard output set table output option i FILE execute commands
from file (NAME := {format|border|expanded|fieldsep|footer|null| o
[FILE] send all query results to file or |pipe
recordsep|tuples_only|title|tableattr|pager}) qecho [STRING] t show
only rows (currently off) write string to query output stream (see
o) T [STRING] set HTML tag attributes, or unset if none x toggle
expanded output (currently off) Copy, Large Object copy ... perform
SQL COPY with data stream to the client host lo_export lo_import
lo_list lo_unlink large object operations
16. psql: d: Describe d [NAME] describe table, index, sequence,
or view d{t|i|s|v|S} [PATTERN] (add quot;+quot; for more detail)
list tables/indexes/sequences/views/system tables da [PATTERN] list
aggregate functions dc [PATTERN] list conversions dC list casts dd
[PATTERN] show comment for object dD [PATTERN] list domains df
[PATTERN] list functions (add quot;+quot; for more detail) dn
[PATTERN] list schemas do [NAME] list operators dl list large
objects, same as lo_list dp [PATTERN] list table access privileges
dT [PATTERN] list data types (add quot;+quot; for more detail) du
[PATTERN] list users l list all databases (add quot;+quot; for more
detail) z [PATTERN] list table access privileges (same as dp)
17. psql: d-eksempel testdb=> CREATE TABLE my_table (
testdb(> first integer not null default 0, testdb(> second
text testdb-> ); CREATE TABLE testdb=> d my_table Table
quot;my_tablequot; Attribute | Type | Modifier
-----------+---------+-------------------- first | integer | not
null default 0 second | text |
18. psql: h: SQL-hjelp ABORT CREATE LANGUAGE DROP TYPE ALTER
AGGREGATE CREATE OPERATOR CLASS DROP USER ALTER CONVERSION CREATE
OPERATOR DROP VIEW ALTER DATABASE CREATE RULE END ALTER DOMAIN
CREATE SCHEMA EXECUTE ALTER FUNCTION CREATE SEQUENCE EXPLAIN ALTER
GROUP CREATE TABLE FETCH ALTER LANGUAGE CREATE TABLE AS GRANT ALTER
OPERATOR CLASS CREATE TRIGGER INSERT ALTER SCHEMA CREATE TYPE
LISTEN ALTER SEQUENCE CREATE USER LOAD ALTER TABLE CREATE VIEW LOCK
ALTER TRIGGER DEALLOCATE MOVE ALTER USER DECLARE NOTIFY ANALYZE
DELETE PREPARE BEGIN DROP AGGREGATE REINDEX CHECKPOINT DROP CAST
RESET CLOSE DROP CONVERSION REVOKE CLUSTER DROP DATABASE ROLLBACK
COMMENT DROP DOMAIN SELECT COMMIT DROP FUNCTION SELECT INTO COPY
DROP GROUP SET CREATE AGGREGATE DROP INDEX SET CONSTRAINTS CREATE
CAST DROP LANGUAGE SET SESSION AUTHORIZATION CREATE CONSTRAINT
TRIGGER DROP OPERATOR CLASS SET TRANSACTION CREATE CONVERSION DROP
OPERATOR SHOW CREATE DATABASE DROP RULE START TRANSACTION CREATE
DOMAIN DROP SCHEMA TRUNCATE CREATE FUNCTION DROP SEQUENCE UNLISTEN
CREATE GROUP DROP TABLE UPDATE CREATE INDEX DROP TRIGGER
VACUUM
19. CREATE / ALTER / DROP av objekter AGGREGATE OPERATOR CAST
RULE CONSTRAINT SCHEMA CONVERSION SEQUENCE DATABASE TABLE DOMAIN
TYPE FUNCTION TRIGGER GROUP USER LANGUAGE VIEW
20. SQL-transaksjoner + vedlikehold Oppdatering av data INSERT
/ UPDATE / DELETE COPY TRUNCATE Sprringer SELECT SELECT INTO
Rettigheter GRANT / REVOKE Vedlikehold EXPLAIN ANALYZE VACUUM
21. SQL: Annet Transaksjoner BEGIN / ABORT / ROLLBACK /
CHECKPOINT / COMMIT SET TRANSACTION / START TRANSACTION / SET
CONSTRAINTS Cursorer DECLARE / FETCH / MOVE / CLOSE Triggere LISTEN
/ NOTIFY / UNLISTEN Parametere SHOW / SET / RESET Annet PREPARE /
EXECUTE / DEALLOCATE LOAD LOCK COMMENT REINDEX CLUSTER SET SESSION
AUTHORIZATION
22. psql: h select: Informasjon om kommando testdb=> h
select Command: SELECT Description: retrieve rows from a table or
view Syntax: SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ]
] * | expression [ AS output_name ] [, ...] [ FROM from_item [,
...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING
condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select
] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [
LIMIT { count | ALL } ] [ OFFSET start ] [ FOR UPDATE [ OF
table_name [, ...] ] ] where from_item can be one of: [ ONLY ]
table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] )]] (
select ) [ AS ] alias [ ( column_alias [, ...] ) ] function_name (
[ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] |
column_definition [, ...] ) ] function_name ( [ argument [, ...] ]
) AS ( column_definition [, ...] ) from_item [ NATURAL ] join_type
from_item [ ON join_condition | USING ( join_column [, ...] )
]
23. psql: Ymse egenskaper Bruk av psql i batch: psql f fil.sql
dbnavn program | psql f - dbnavn Readline-sttte (!) Innebygget
tidtaking p operasjoner: db=> timing Timing is on. net=>
select count(*) from tabellnavn; count ------- 25523 (1 row) Time:
52.729 ms Valg av format p output
HTML|format|border|expanded|fieldsep|footer|null
recordsep|tuples_only|title|tableattr|pager
24. psql: Kopiering av data i bulk: COPY Laster inn r
tabseparerte datafiler i n transaksjon Fordel: gr raskt Ulempe:
dersom n rad ikke blir akseptert, forkastes alle radene copy
tabellnavn from filename psql sttter ogs last av store objekter
(lo_*)
25. pgAdmin III Fritt tilgjengelig grafisk
administrasjonsverkty for PostgreSQL Kjrer p: Linux, FreeBSD &
Windows Versjon 1.2 sttter 8.0
26. pgAdmin III: Screenshots
27. phpPgAdmin
28. Pgbash home ~> pgbash Welcome to Pgbash version 7.3 (
bash-2.05a.0(1)-release ) Type '?' for HELP. Type 'connect to DB;'
before executing SQL. Type 'SQL;' to execute SQL. Type 'exit' or
'Ctrl+D' to terminate Pgbash. home ~> CONNECT TO testdb; home
~> SELECT * FROM iso3166 LIMIT 10; cc | country
----+--------------------- AF | Afghanistan AL | Albania DZ |
Algeria AS | American Samoa AD | Andorra AO | Angola AI | Anguilla
AQ | Antarctica AG | Antigua and Barbuda AR | Argentina (10
rows)
29. Andre kommandoer Administrative verkty pg_ctl start, stop
eller restart av server pg_config dumper config-informasjon Dump
& restore pg_dump og pg_dumpall Frstnevnte dumper n database,
sistnevnte alle Valg mellom alt/schema/data p tabell/databaseniv
Output: plain-text SQL, tar, eget arkivformat (m/kompr) pg_restore
Laster inn input fra pg_dump*
30. Contrib Egen contrib-distribusjon, med dels utvidelser og
dels stttefunksjonalitet: dblink - Allows remote query execution
dbmirror - Replication server dbsize - Reports database and table
disk space fuzzystrmatch - Levenshtein, metaphone, and soundex
fuzzy string matching isbn_issn - PostgreSQL type extensions for
ISBN and ISSN mysql - Utility to convert MySQL schema dumps to
PostgreSQL oracle - Converts Oracle database schema to PostgreSQL
pg_autovacuum - Automatically performs vacuum pg_upgrade - Upgrade
from previous PostgreSQL version pgbench - TPC-B like benchmarking
tool pgcrypto - Cryptographic functions reindexdb - Reindexes a
database apache_logging - Getting Apache to log to PostgreSQL
tsearch2 - Full-text-index support using GiST xml2 - Storing XML in
PostgreSQL
31. PostgreSQL: Egenskaper
32. Overordnede egenskaper Fritt tilgjengelig; ingen
lisenskostnader tenke p Ekstremt robust gjennom mange r Designet
for kreve et minimum av administrasjon; enkle, men gode
administrasjonsmekanismer (CLI og GUI) Portabel, kjrer p alle
relevante plattformer Utvidbar, med godt dokumenterte API for legge
til funksjonalitet Flere ulike alternativ for hytilgjengelighet /
replikering Veldig god de facto support, med mulighet for
kommersiell support for de som nsker det
33. Egenskaper SQL-sttte Database Fullt ut ACID-kompatibel God
ANSI SQL-sttte Fremmednkler (referential integrity) Rules Bedre enn
rad-niv lsing (MVCC) Views 5.0 Funksjonelle og partielle indekser
Triggers 5.1 (rudimentary) Cursors 5.0 Utvikling Unicode Stored
procedures 5.0 Sequences 5.1? Procedural languages Inheritance ?
Native interfaces for ODBC, Outer Joins JDBC, C, C++, PHP, Perl,
TCL, Sub-selects ECPG, Python, and Ruby Support for UNION Et pent
og veldokumentert API (ALL/EXCEPT) Sikkerhet Utvidbar Native SSL
support Datatyper Native Kerberos autentisering Funksjoner
Operatorer
34. Etterlevelse av SQL-standarden SQL-standarden ISO/IEC 9075
Database Language SQL Sist revidert i 2003, aka ISO/IEC 9075:2003
eller bare SQL:2003 Tidligere versjoner var SQL:1999 og SQL-92, men
SQL:2003 erstatter disse Kravene er definert som individuelle
egenskaper: Core, som alle SQL-implementasjoner m etterleve resten
er valgfrie, gruppert i packages Ingen kjente databasesystemer som
fullt ut etterlever Core SQL:2003 PostgreSQL versus SQL:2003
PostgreSQL forsker etterleve standarden der det er mulig uten
delegge bakoverkompatibilitet og sunn fornuft Mye av SQL:2003 er
stttet, men iblant med noe forskjellig syntax Det arbeides med
ytterligere forbedre etterlevelsen 255 krav (58%) etterlevd, 184
(42%) er ikke etterlevd.
35. Egenskaper for sikre integritet: ACID Atomisk / Atomic En
transaksjon er udelelig alt eller intet Konsistent / Consistent En
transaksjon skal bringe databasen fra en konsistent til en
konsistent tilstand uten at den ndvendigvis er konsistent underveis
Isolert / Isolated Transaksjoner berres ikke av konsekvensene til
andre transaksjoner som kjres samtidig Holdbarhet / Durable Nr en
transaksjon har gjort COMMIT, er endringene permanent lagret, ogs
etter et havari
36. MultiVersion Concurrency Control (MVCC) I motsetning til
tradisjonell rad-lsing ved oppdateringer, vedlikeholder MVCC flere
versjoner av en gitt rad, og muliggjr derfor: 1. Hver transaksjon
ser et snapshot slik databasen s ut ved transaksjonens start,
uavhengig av hva andre transaksjoner gjr mens den kjrer 2.
Leseoperasjoner blokkerer ikke skriveoperasjoner 3.
Skriveoperasjoner blokkerer ikke leseoperasjoner 4.
Skriveoperasjoner blokkerer bare nr de oppdaterer samme rad En
annen fordel med MVCCs snapshot er muligheten for varme backuper Se
Transaction Processing in PostgreSQL av Tom Lane
37. Transaksjoner Tett knyttet til ACID/MVCC er
transaksjonsbegrepet: En transaksjon grupperer flere steg til tt
atomisk steg Resultatet av transaksjonen er enten komplett eller
intet Dersom en feil oppstr i ett av stegene, forkastes hele
transaksjonen BEGIN; n transaksjonsblokk UPDATE accounts SET
balance = balance - 100.00 WHERE name = Alice; UPDATE branches SET
balance = balance - 100.00 WHERE name = (SELECT branch_name FROM
accounts WHERE name = Alice); UPDATE accounts SET balance = balance
+ 100.00 WHERE name = Bob; UPDATE branches SET balance = balance +
100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name =
Bob); COMMIT;
38. Views Et view maskerer en sprring bak en virtuell tabell;
fordeler: Konsistent grensesnitt selv om tabeller i bakgrunnen
endrer seg Innpakking av detaljer i tabeller Views basert p views
kan maskere kompleksitet Kan gi selektiv tilgang til informasjon,
og dermed kt sikkerhet Fletting av utvalgte kolonner fra to
tabeller: CREATE VIEW myview AS SELECT city, temp_lo, temp_hi,
prcp, date, location FROM weather, cities WHERE city = name; SELECT
* FROM myview; PostgreSQL sttter forelpig ikke materialserte views,
dvs. lagring av resultatet av sprringer bak views (nyttig ifb.
datavarehus / analytiske databaser).
39. Schemas Schemas er en mte dele opp namespace internt i en
database, omtrent som filkataloger (bare ett niv): Separere ulike
brukere fra hverandre Gruppere databaseobjekter logisk sammen Unng
navnekollisjoner i strre database (Ingen fringer mhp. rettigheter)
CREATE SCHEMA blug; CREATE TABLE blug.tabell (..); SHOW
search_path; DROP SCHEMA blug [CASCADE]; public er default; i
tillegg inneholder hver database pg_catalog som inneholder
systemtabeller mv.
40. Constraints Datatypene som definerer kolonnene i en tabell
gir begrensninger p hvilke data som kan legges inn Constraints gir
ytterligere fleksibilitet mhp. begrensninger p hva som kan legges
inn; kan defineres for kolonner & tabeller Eksempel: En kolonne
med priser vil vre hel- eller flyttall, men i tillegg bare positive
verdier PostgreSQL sttter fem former for constraints Check - price
numeric CHECK (price > 0) Not NULL - product_no integer NOT NULL
Unikhet - product_no integer UNIQUE Primrnkler - Unik + !NULL:
PRIMARY KEY (a, c) Fremmednkler - product_no integer REFERENCES
products (product_no),
41. Triggere En trigger kan defineres til eksekvere fr eller
etter en INSERT, UPDATE eller DELETE, enten per statement eller
modifisert rad Eksempel: CREATE TRIGGER if_film_exists BEFORE
DELETE OR UPDATE ON distributors FOR EACH ROW EXECUTE PROCEDURE
check_foreign_key (1, 'CASCADE', 'did', 'films', 'did'); Funksjonen
m vre definert i et prosedyresprk
42. Inheritance / Arv Arv i PostgreSQL er samme konsept som arv
mellom objekter i objektorienterte sprk som C++ En tabell som arver
en annen fr med seg alle kolonner fra foreldretabellen. Kan ogs
begrense sprringer til foreldretabeller: SELECT a, b from ONLY
tableA Stttes ogs av UPDATE, DELETE og andre Ikke fullt ut
integrert med unike begrensninger eller fremmednkler
43. Eksempel p inheritance CREATE TABLE capitals ( name text,
population real, altitude int, -- (in ft) state char(2) ); CREATE
TABLE non_capitals ( name text, population real, altitude int --
(in ft) ); CREATE VIEW cities AS SELECT name, population, altitude
FROM capitals UNION SELECT name, population, altitude FROM
non_capitals; CREATE TABLE cities ( name text, population real,
altitude int -- (in ft) ); CREATE TABLE capitals ( state char(2) )
INHERITS (cities);
44. Cursorer / Markrer Cursorer gir oss muligheten for for
hente ut resultatsettet i lettfordyelige blokker av rader. Dette
kan bidra til unng ressursproblemer p klientsiden, og muliggjr
retur av referanse til en cursor i stedet for resultatsettet
45. Sekvenser testdb=> CREATE TABLE tabell ( id integer
default nextval('news_id') UNIQUE not NULL, news text not NULL,
post_time time default now() ); testdb=> INSERT INTO tabell
(news) VALUES (abc'); INSERT 7259941 1 testdb=> INSERT INTO
tabell (news) VALUES (def'); INSERT 7259943 1 testdb=> INSERT
INTO tabell (news) VALUES (ghi'); INSERT 7259944 1 testdb=>
SELECT * FROM tabell; id | news | post_time
------+-------+---------- 1000 | abc | 15:18:40 1001 | def |
15:18:56 1002 | ghi | 15:19:36
46. Subqueries Subqueries som en konstant: SELECT f1.firstname,
f1.lastname, f1.state FROM friend f1 WHERE f1.state ( SELECT
f2.state FROM friend f2 WHERE f2.firstname = Dick AND f2.lastname =
Cleason ); Subqueries som korrellerte verdier: SELECT f1.firstname,
f1.lastname, f1.age FROM friend f1 WHERE age = ( SELECT MAX(f2.age)
FROM friend f2 WHERE f1.state = f2.state ); Multiple kolonner
stttes: WHERE (uppercol1, uppercol2) IN (SELECT col1, col2 FROM
subtable) Subqueries kan ogs brukes ifb. DELETE, INSERT, UPDATE
(SELECT INTO oppretter en ny tabell med resultatet)
48. Write-Ahead Logging (WAL) Standard teknikk for
transaksjonslogging Endringer i datafiler kan bare skrives etter at
endringene er logget, og loggen skrevet til disk Trenger ikke
flushe datafilene etter hver commit Fordeler Redusert antall
skriveoperasjoner mot disk n sync mot loggfilen i stedet for
potensielt mange mot datafilene Loggfilen skrives sekvensielt
Datafilene er konsistente Muliggjr online backup og point-in-time
recovery
49. Nytt i versjon 8.0 7.0 lansert i midten av 2000, s 4.5 r
med utvikling 8 mneder med utvikling i forhold til 7.x Totalt 17
sider med endringer 5 mneder med betatesting Ml: Gjre PostgreSQL
til en enterprise-kandidat Viktigste nye egenskaper: Tablespaces:
spre databaser p tvers av disker Savepoints Point-in-time Recovery
(PITR) Perl integrert i server Native sttte for Windows (~10
rsverk)
50. Tablespaces I PostgreSQL < 8 mtte man bruke symlinker
for legge ulike datafiler p ulike partisjoner Tablespaces lar oss
styre hvilken disk som lagrer ulike: Database Schema Tabell
Indekser Fordeler: Styres p individuelt objektniv Forbedrer ytelse
og kontroll over hvordan diskene utnyttes Strre fleksibilitet til
legge til plass nr en disk gr full CREATE TABLESPACE fastspace
LOCATION /disk1/pgsql/data; CREATE TABLE foo(i int) TABLESPACE
fastspace;
51. Savepoints Savepoints gir oss muligheten til hndtere feil
inne i transaksjoner p en grasis mte, uten ndvendigvis mtte avbryte
hele transaksjonen Endringer fr savepoint gjennomfres selv om
rollback til det skjer Eventuelle rollbacks m/konsekvenser er ikke
synlig utenfor transaksjonen, jfr. ACID-prinsippene BEGIN; UPDATE
accounts SET balance = balance - 100.00 WHERE name = Alice;
SAVEPOINT my_savepoint; n transaksjon UPDATE accounts SET balance =
balance + 100.00 WHERE name = Bob; Oops ... bruk Charlie sin konto
i stedet! ROLLBACK TO my_savepoint; UPDATE accounts SET balance =
balance + 100.00 WHERE name = Charlie; COMMIT;
52. Point-In-Time Recovery I PostgreSQL < 8, var den eneste
mten komme seg videre etter et diskcrash enten : Gjenskape data fra
backup, eller Bruke en replikerende server Point-in-time recovery
muliggjr kontinuerlig backup av serveren: Write-ahead logen (WAL)
beskriver alle endringer; ved ta backup av denne, kan vi spole
databasetilstanden frem og tilbake. PITR baserer seg p lpende
overfring av WAL til failovermaskine, basert p en fritt valgt
arkiverings- mekanisme Recover frem til crashtidspunktet, eller et
vilkrlig valgt tidspunkt
53. Sttte for, eh, Windows #1 Har tidligere vrt tilgjengelig
via Cygwin, n native Sttter 2000, XP & 2003 Kan kjre som
service Installer som fungerer rimelig bra:
54. Sttte for, eh, Windows #2 Inkluderer flgende add-ons:
Npgsql JDBC psqlODBC pgAdmin III
55. PostgreSQL bak kulissene
56. Overordnet arkitektur Klientprosesser Serverprosesser
Initiell forbindelse Klient- postmaster Disk- og autentisering
Kernel disk buffers (daemon) applikasjon buffere Spawner
serverprosess Tabeller Klient postgres libpq postgres Sprringer
bibliotek (backend) postgres og resultatsett Disk (backend) Delte
(backend) 23961 Ss 0:05.64 /usr/local/bin/postmaster (postgres)
23963 S 0:01.13 postmaster: stats buffer process (postgres) 23966 S
0:03.24 postmaster: stats collector process (postgres) 36324 I
0:00.43 postmaster: oddbjorn testdb [local] idle (postgres) 36428 I
0:00.23 postmaster: oddbjorn testdb [local] idle (postgres)
57. Hva skjer med en sprring? 1. Sprring ankommer via en
socket, legges i en streng Postgres 2. Lex/yacc parser strengen, og
type sprring identifiseres Parser 3. Hvis kompleks sprring g
videre, query tree hvis ikke: Traffic cop Utility cmd 4. Send til
respektive spesialfunk. query tree Rewrite & Generate paths 5.
Tar hensyn til regler, views++ query tree + views og annet Planner
/ 6. Velger optimal plan basert p optimizer kostnad av query tree,
og sender query plan denne til executor Executor 7. Gjennomfrer
henting av data, sort, joins, kvalifiseringer av data og leverer
til slutt resultatet
58. Tuning: EXPLAIN PostgreSQL lager en query plan for hver
sprring Viktig redskap for forst og tune sprringer inkl. bruk av
indekser EXPLAIN foran en SELECT viser den respektive planen:
testdb=> EXPLAIN SELECT * FROM syslog; QUERY PLAN
------------------------------------------------------------ Seq
Scan on syslog (cost=0.00..20.00 rows=1000 width=104) (1 row)
Kostnadene er mlt i antall pages som 1. Estimert oppstartskostnad m
hentes fra disk. CPU-kostnadene konverteres til disk-enheter. 2.
Estimert totalkostnad (for alle rader) 3. Estimert antall rader som
sprringen resulterer i 4. Bredde mlt i bytes per rad som sprringen
resulterer i (Mye mer info): Efficient SQL, OSCON 2003
http://www.gtsm.com/oscon2003/toc.html
59. Tuning: ANALYZE testdb=> ANALYZE VERBOSE syslog; INFO:
analyzing quot;public.syslogquot; INFO: quot;syslogquot;: 3614
pages, 3000 rows sampled, 26243 estimated total rows ANALYZE
testdb=> EXPLAIN SELECT * from syslog; QUERY PLAN
--------------------------------------------------------------- Seq
Scan on syslog (cost=0.00..3876.43 rows=26243 width=132) (1 row)
Kvaliteten p planen er alts avhengig av: kunnskapen PostgreSQL har
om tabeller, indekser mv kombinert med parametersettingene i
postgresql.conf
60. Tuning: VACUUM VACUUM m kjres periodisk av flgende rsaker:
1. Frigjre diskplass brukt av oppdaterte eller slettede rader 2.
Oppdatere statistikken som benytes for lage query plans 3. Beskytte
mot tap av veldig gamle data p grunn av wraparound av
transaksjons-IDen Kan kjres parallellt med vanlig bruk av databasen
pg_autovacuum contrib-klient som overvker alle databaser i en
PostgreSQL-instans Bruker statistikkinnsamlingen til overvke
INSERT-, UPDATE- og DELETE-aktiviteten Starter automagisk VACUUM nr
definerte grenseverdier overstiges
61. Katalogstruktur #1 /usr/local/pgsql/data PG_VERSION f.eks.
8.0 postgresql.conf konfigurasjonfil postmaster.opts evt. opsjoner
postmaster.pid PID + litt til pg_hba.conf tilgangskontroll
pg_ident.conf mapping mellom identer base/ databasefilene global/
pg_log/ applikasjonslogger fra pg pg_clog/ transaksjonslogger
pg_xlog/ WALtransaksjonslogger pg_tblspc/ tablespaces
63. postgresql.conf: Resource Settings # - Memory -
shared_buffers = 1000 # min 16, at least max_connections*2, 8KB
each #sort_mem = 1024 # min 64, size in KB #vacuum_mem = 8192 # min
1024, size in KB # - Free Space Map - #max_fsm_pages = 20000 # min
max_fsm_relations*16, 6 bytes each #max_fsm_relations = 1000 # min
100, ~50 bytes each # - Kernel Resource Usage -
#max_files_per_process = 1000 # min 25 #preload_libraries = ''
64. postgresql.conf: Annet Security & Authentication Write
Ahead Log Settings Checkpoints Query Tuning Planner Method Enabling
Planner Cost Constants Genetic Query Optimizer Error Reporting and
Logging syslog When to log What to log Runtime Statistics
Statistics Monitoring Query/Index Statistics Collector Client
Connection Defaults Statement Behaviour Locale and Formatting Lock
Management Version / Platform Compatibility
65. Tilgangskontroll: pg_hba.conf # PostgreSQL Client
Authentication Configuration File #
=================================================== # # This file
controls: which hosts are allowed to connect, how clients # are
authenticated, which PostgreSQL user names they can use, which #
databases they can access. Records take one of seven forms: # #
local DATABASE USER METHOD [OPTION] # host DATABASE USER IP-ADDRESS
IP-MASK METHOD [OPTION] # hostssl DATABASE USER IP-ADDRESS IP-MASK
METHOD [OPTION] # hostnossl DATABASE USER IP-ADDRESS IP-MASK METHOD
[OPTION] # host DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION]
# hostssl DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION] #
hostnossl DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION] # #
[..] # METHOD can be quot;trustquot;,
quot;rejectquot;,quot;md5quot;, quot;cryptquot;, #
quot;passwordquot;, quot;krb4quot;, quot;krb5quot;,
quot;identquot;, or quot;pamquot;. # # If you want to allow
non-local connections, you need to add more # quot;hostquot;
records. Also, remember TCP/IP connections are only enabled # if
you enable quot;tcpip_socketquot; in postgresql.conf. # TYPE
DATABASE USER IP-ADDRESS IP-MASK METHOD local all all trust host
all all 127.0.0.1 255.255.255.255 trust host all all 192.168.1.2
255.255.255.255 trust
66. Sjekk av status: pg_controldata home ~> pg_controldata
/usr/local/pgsql/data pg_control version number: 72 Catalog version
number: 200310211 Database cluster state: in production pg_control
last modified: Sun Jan 30 17:08:32 2005 Current log file ID: 0 Next
log file segment: 57 Latest checkpoint location: 0/3879ABE4 Prior
checkpoint location: 0/3879ABA4 Latest checkpoint's REDO location:
0/3879ABE4 Latest checkpoint's UNDO location: 0/0 Latest
checkpoint's StartUpID: 78 Latest checkpoint's NextXID: 886791
Latest checkpoint's NextOID: 5065687 Time of latest checkpoint: Thu
Jan 27 16:19:38 2005 Database block size: 8192 Blocks per segment
of large relation: 131072 Maximum length of identifiers: 64 Maximum
number of function arguments: 32 Date/time type storage:
floating-point numbers Maximum length of locale name: 128
LC_COLLATE: C LC_CTYPE: C
67. Systemkatalogen & Information schema Systemkatalogen:
pg_catalog Systemkatalogen er et schema som inneholder
PostgreSQL-spesifikke tabeller og views som beskriver tilgjengelige
datatyper, funksjoner, operatorer mv. Information schema:
information_schema Blir automatisk etablert i alle databaser
Inneholder, i likhet med pg_catalog, et antall views med
informasjon om objekter i databasen Er en del av SQL-standarden;
stabil og portabel Inneholder ikke PostgreSQL-spesifikk
informasjon
68. Systemkatalogene (grafisk)
69. Datatyper iflg. systemkatalogen: dT+ i psql List of data
types Schema | Name | Internal name | Size | Description
------------+-----------------------------+------------------+------+-------------------------------------------------------------------
pg_catalog | quot;SETquot; | SET | var | set of tuples pg_catalog |
quot;anyquot; | any |4 | pg_catalog | quot;charquot; | char |1 |
single character pg_catalog | quot;pathquot; | path | var |
geometric path '(pt1,...)' pg_catalog | quot;triggerquot; | trigger
|4 | pg_catalog | quot;unknownquot; | unknown | var | pg_catalog |
abstime | abstime |4 | absolute, limited-range date and time (Unix
system time) pg_catalog | aclitem | aclitem | 12 | access control
list pg_catalog | anyarray | anyarray | var | pg_catalog |
anyelement | anyelement |4 | pg_catalog | bigint | int8 |8 | ~18
digit integer, 8-byte storage pg_catalog | bit | bit | var |
fixed-length bit string pg_catalog | bit varying | varbit | var |
variable-length bit string pg_catalog | boolean | bool |1 |
boolean, 'true'/'false' pg_catalog | box | box | 32 | geometric box
'(lower left,upper right)' pg_catalog | bytea | bytea | var |
variable-length string, binary values escaped pg_catalog |
character | bpchar | var | char(length), blank-padded string, fixed
storage length pg_catalog | character varying | varchar | var |
varchar(length), non-blank-padded string, variable storage length
pg_catalog | cid | cid |4 | command identifier type, sequence in
transaction id pg_catalog | cidr | cidr | var | network IP
address/netmask, network address pg_catalog | circle | circle | 24
| geometric circle '(center,radius)' pg_catalog | cstring | cstring
| var | pg_catalog | date | date |4 | ANSI SQL date pg_catalog |
double precision | float8 |8 | double-precision floating point
number, 8-byte storage pg_catalog | inet | inet | var | IP
address/netmask, host address, netmask optional pg_catalog |
int2vector | int2vector | 64 | array of 32 int2 integers, used in
system tables pg_catalog | integer | int4 |4 | -2 billion to 2
billion integer, 4-byte storage pg_catalog | internal | internal |4
| pg_catalog | interval | interval | 12 | @ , time interval
pg_catalog | language_handler | language_handler | 4 | pg_catalog |
line | line | 32 | geometric line (not implemented)' pg_catalog |
lseg | lseg | 32 | geometric line segment '(pt1,pt2)' pg_catalog |
macaddr | macaddr |6 | XX:XX:XX:XX:XX:XX, MAC address pg_catalog |
money | money |4 | monetary amounts, $d,ddd.cc pg_catalog | name |
name | 64 | 63-character type for storing system identifiers
pg_catalog | numeric | numeric | var | numeric(precision, decimal),
arbitrary precision number pg_catalog | oid | oid |4 | object
identifier(oid), maximum 4 billion pg_catalog | oidvector |
oidvector | 128 | array of 32 oids, used in system tables
pg_catalog | opaque | opaque |4 | pg_catalog | point | point | 16 |
geometric point '(x, y)' pg_catalog | polygon | polygon | var |
geometric polygon '(pt1,...)' pg_catalog | real | float4 |4 |
single-precision floating point number, 4-byte storage pg_catalog |
record | record |4 | pg_catalog | refcursor | refcursor | var |
reference cursor (portal name) pg_catalog | regclass | regclass |4
| registered class Operasjoner mot kolonner med felles type gir
pg_catalog | regoper | regoper |4 | registered operator pg_catalog
| regoperator | regoperator |4 | registered operator (with args)
konsistente resultater, og er normalt det pg_catalog | regproc |
regproc |4 | registered procedure pg_catalog | regprocedure |
regprocedure |4 | registered procedure (with args) pg_catalog |
regtype | regtype |4 | registered type raskeste pg_catalog |
reltime | reltime |4 | relative, limited-range time interval (Unix
delta time) pg_catalog | smallint | int2 |2 | -32 thousand to 32
thousand, 2-byte storage pg_catalog | smgr | smgr |2 | storage
manager Riktig typebruk gir formatvalidering av data, pg_catalog |
text | text | var | variable-length string, no limit specified
pg_catalog | tid | tid |6 | (Block, offset), physical location of
tuple og ugyldige formater aksepteres ikke pg_catalog | time with
time zone | timetz | 12 | hh:mm:ss, ANSI SQL time pg_catalog | time
without time zone | time |8 | hh:mm:ss, ANSI SQL time pg_catalog |
timestamp with time zone | timestamptz |8 | date and time with time
zone Riktig bruk av datatypene gir den mest pg_catalog | timestamp
without time zone | timestamp |8 | date and time pg_catalog |
tinterval | tinterval | 12 | (abstime,abstime), time interval
effektive lagringen av data pg_catalog | void | void |4 |
pg_catalog | xid | xid |4 | transaction id (62 rows)
70. Innebygde datatyper
71. Nettverkstyper Flgende tre datatyper: inet - host eller
nettmaske, fex. 10.0.0.1 cidr - nettverksmasker, fex 10.0.0.0/8
macaddr - fex 08:00:2b:01:02:03 Gir endel kule muligheter: 1. WHERE
192.168.1.5 < 192.168.1.6 2. WHERE 192.168.1/24 >>
192.168.1.5 3. WHERE ip dS List of relations Schema | Name | Type |
Owner ------------+--------------------------+---------+-------
pg_catalog | pg_aggregate | table | pgsql pg_catalog | pg_am
tabellene i systemkatalogen, | table | pgsql I lagrer PostgreSQL
metadata; pg_catalog | pg_amop informasjon om databaser,table
views, brukere | tabeller, | pgsql f.eks. pg_catalog | pg_amproc |
table | pgsql og s videre. Ved CREATE DATABASE blir f.eks.
pg_catalog | pg_attrdef | table | pgsql pg_database oppdatert, samt
databasen skrevet til disk. pg_catalog | pg_attribute | table |
pgsql pg_catalog | pg_cast | table | pgsql pg_catalog | pg_class |
table | pgsql pg_catalog | pg_constraint | table | pgsql pg_catalog
| pg_conversion | table | pgsql pg_catalog | pg_database | table |
pgsql pg_catalog | pg_depend | table | pgsql pg_catalog |
pg_description | table | pgsql pg_catalog | pg_group | table |
pgsql pg_catalog | pg_index | table | pgsql pg_catalog | pg_indexes
| view | pgsql pg_catalog | pg_inherits | table | pgsql [..]
75. Utvidelse av SQL-reportoaret SQL-sttten i PostgreSQL kan
utvides vha. bla. flgende: funksjoner aggregater (min, max, sum
osv) datatyper operatorer Dette er relativt enkelt, ettersom
definisjonene for disse ligger i systemkatalogen. Potensielt mulig
skyte seg selv i foten.. PostgreSQL kan dessuten laste
brukerutviklet kode vha. dynamisk lasting av bibliotek som
implementerer en type eller en funksjon
76. Replikeringslsninger
77. Slony-I En master to multiple slaves replikeringslsning
Utvikles av Jan Wieck Slony er russisk flertall for elefant
http://www.slony.info Sttter: etablering av en replika i fart
asynkron replikering enhver replika kan overta for enhver annen
node promotering av slave til master hvis master dr Slony-2 kommer
til sttte multi-master Introducing Slony & Building and
Configuring Slony A. Elein Mustain
http://www.onlamp.com/lpt/a/{5328,5486}
79. Andre replikeringslsninger pgcluster Synkron replikering
inkl. lastbalansering http://pgcluster.projects.postgresql.org/
pgpool Connection-pool-server; ligger som et lag mellom klienter og
opp til 2 PostgreSQL- servere Cacher connections for redusere
overhead Automatisk failover til sekundr server nr primr gr ned
Replikering ved ag pgpool sender transaksjonene parallellt til hver
server (synkron replikering) eRServer Trigger-basert
single-master/multi-slave asynkron replikeringslsning Ikke lenger i
live? http://www.erserver.com/ pgreplicator Store and forward
asynkron replikering To-veis synkronisering, differensiell
replikering Ikke lenger i live?
http://pgreplicator.sourceforge.net
80. Programmering mot PostgreSQL
81. Sprk: Frontend versus backend Frontend: Sprk for aksessere
data fra utsiden, fex. script eller applikasjoner Backend: Sprk for
utvide funksjonaliteten internt i databaseserveren Praktisk talt
alle sprkene kan benyttes i begge roller Klassisk avveining om
funksjonalitet skal ligger i databasen eller i applikasjonen
82. Funksjoner i andre sprk enn SQL&C PostgreSQL sttter
brukerdefinerte funksjoner i et assortert utvalg sprk ut over SQL
og C. PL/pgSQL PL/Tcl PL/Perl PL/Python PL/PHP PL/Java / pl-j PL =
procedural languages Andre sprk kan defineres av brukeren
PostgreSQL forholder seg ikke til kildekoden; overfrer bare kallet
til en handler som deretter fungerer som lim i forhold til det
aktuelle sprket.
83. Bruk av sprk createlang plperl dbname CREATE FUNCTION
perl_max (integer, integer) RETURNS integer AS $$ if ($_[0] >
$_[1]) { return $_[0]; } return $_[1]; $$ LANGUAGE plperl; CREATE
TABLE employee ( name text, basesalary integer, bonus integer );
CREATE FUNCTION empcomp(employee) RETURNS integer AS $$ my ($emp) =
@_; return $emp->{basesalary} + $emp->{bonus}; $$ LANGUAGE
plperl; SELECT name, empcomp(employee.*) FROM employee;
84. PL/pgSQL PL/pgSQL er et lastbart prosedyresprk Sttter:
Definering av funksjoner og triggere Kontrollstrukturer Beregninger
Gjenbruker alle datatyper, funksjoner og operatorer som er
tilgjengelig i PostgreSQL Gruppering av transaksjoner i ett kall
internt i databaseserveren, unngr overhead med klient/tjener-
arkitekturen
85. PL/pgSQL: Eksempel #1 CREATE FUNCTION tax(numeric) RETURNS
numeric AS SELECT ($1 * 0.06::numeric(8,2))::numeric(8,2); LANGUAGE
sql; CREATE FUNCTION shipping(numeric) RETURNS numeric AS SELECT
CASE WHEN $1 < 2 THEN CAST(3.00 AS numeric(8,2)) WHEN $1 >= 2
AND $1 < 4 THEN CAST(5.00 AS numeric(8,2)) WHEN $1 >=4 THEN
CAST(6.00 AS numeric(8,2)) END; LANGUAGE sql; SELECT part_id,
trim(name) AS name, cost, tax(cost), cost + tax(cost) AS subtotal,
shipping(weight), cost + tax(cost) + shipping(weight) AS total FROM
part ORDER BY part_id;
86. PL/pgSQL: Eksempel #2 CREATE TABLE emp (empname text,
salary int4, last_date datetime, last_user name); CREATE FUNCTION
emp_stamp () RETURNS OPAQUE AS BEGIN -- Check that empname and
salary are given IF NEW.empname ISNULL THEN RAISE EXCEPTION
''empname cannot be NULL value' '; END IF; IF NEW.salary ISNULL
THEN RAISE EXCEPTION ''% cannot have NULL salary'', NEW.empname;
END IF; -- Who works for us when she must pay for? IF NEW.salary
< 0 THEN RAISE EXCEPTION ''% cannot have a negative salary'',
NEW.empname; END IF; -- Remember who changed the payroll when
NEW.last_date := ' 'now' '; NEW.last_user := getpgusername();
RETURN NEW; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER emp_stamp
BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE
emp_stamp();
87. pl/R R er et integrert milj for manipulering av data,
beregninger og grafisk visning Nrt basert p AT&Ts S R
inkluderer: effektiv hndtering og lagring av data operatorer for
beregninger over tabeller og matriser et strre antall koherente og
integrerte verkty for analyse av data verkty for generere
hykvalitets grafer, bde til skjerm og print et modent
programmeringssprk for knytte det hele sammen PL/R er et lastbart
prosedyresprk som muliggjr funksjoner og triggere i PostgreSQL til
uttrykkes i R Skrevet av Joe Conway How to Graph data in PostgreSQL
av Robert Bernier:
http://www.varlena.com/varlena/GeneralBits/Tidbits/ +
bernier/art_66/graphingWithR.html
88. pl/R: Plotting av brannvegglogger BEGIN; CREATE TEMPORARY
TABLE mytemp(id serial, hit int, source_ip inet) ON COMMIT DROP;
INSERT INTO mytemp(hit,source_ip) SELECT count(*) AS counterhits,
source_ip FROM firewall GROUP BY source_ip ORDER BY counterhits
DESC; CREATE OR REPLACE FUNCTION f_graph2() RETURNS text AS ' sql
prepare(SELECT id,news from news); $sth->execute; while (@news =
$sth->fetchrow) { $date = $news[0]; $article = $news[1];
print($date:t $articlen); }
91. Bruk av PostgreSQL fra Python #1 PygreSQL Eldst og velprvd
Nr libpq http://www.pygresql.org psycopg Basert p libpq, med DB
API-grensesnitt Benyttes mye ifb. Zope Smart gjenbruk av
connections http://initd.org/software/initd/psycopg og flere
(pyPgSQL, DB-API)
92. Bruk av PostgreSQL fra Python #2 import psycopg o =
psycopg.connect('dbname=mydb user=fog') c = o.cursor()
c.execute('SELECT * FROM addressbook WHERE name = %s', [Bob']) data
= c.fetchone() print quot;Saving image of %s %squot; % (data[0],
data[1]) open(data[0]+quot;.pngquot;, 'w').write(data[3])
94. ODBC & JDBC ODBC http://odbc.postgresql.org/ JDBC Ren
Java-implementasjon Sttter JDBC v3 + utvidelser
http://jdbc.postgresql.org/ Begge tilgjengelig som
FreeBSD-ports
95. Tredjepartslsninger (noe redusert pga. omfanget p
resten)
96. Autodoc Dokumenterer en PostgreSQL-database Template-basert
rapportering til: HTML Dot Dia Docbook XML
97. Autodoc: Eksempler #1 HTML Docbook
98. Autodoc: Eksempler #2 dia graphviz
99. PostGIS PostGIS implementerer sttte for spatial data Data
som beskriver lokasjon eller form Punkter Linjer Polygoner samt
funksjoner mhp. forhold disse i mellom: Avstand Nrhet (touching og
connectivity) Inneholder (inside og overlapping)
100. PostGIS: Eksempel CREATE TABLE pubs (name VARCHAR,
beer_price FLOAT4); ADDGEOMETRYCOLUMN (beer_db,'pubs','location
,2167,'POINT',3); INSERT INTO pubs VALUES ('Garricks
Head',4.50,GeometryFromText('POINT (1196131 383324),2167)); SELECT
name, beer_price, DISTANCE(location,
GeometryFromText('POINT(1195722 383854)',2167)) FROM pubs ORDER BY
beer_price; name | beer_price | distance
---------------+------------+------------------ Fireside | 4.25 |
1484.10275160491 The Forge | 4.33 | 1533.06561109862 Rumours | 4.46
| 2042.00094093097 Garricks Head | 4.5 | 669.389105609889 Slap
Happy | 4.5 | 1882.31910168298 Old Bailys | 4.55 | 1147.20900404641
Black Sheep | 4.66 | 536.859935972633 Big Bad Daves | 4.75 |
907.446543878884 SELECT name, beer_price + 0.001 *
DISTANCE(location, GeometryFromText('POINT(1195722 383854)',2167))
AS net_price FROM pubs ORDER BY price; name | net_price
---------------+------------------ Garricks Head | 5.16938910560989
Black Sheep | 5.19685978338474 Big Bad Daves | 5.65744654387888 Old
Bailys | 5.69720919478127 Fireside | 5.73410275160491 The Forge |
5.86306553480468 Slap Happy | 6.38231910168298 Rumours |
6.50200097907794
101. Hvordan komme i gang?
102. www.postgresql.org
103. Dokumentasjon #1
104. Dokumentasjon #2 1332 sider!
105. http://pgfoundry.org
106. http://gborg.postgresql.org/
107. Mailinglister & IRC pgsql-admin pgsql-advocacy Et
assortert utvalg mailinglister er tilgjengelig: pgsql-announce
http://www.postgresql.org/community/lists/subscribe Generelt hyt
volum pgsql-bugs Hy kompetanse pgsql-docs Strekker seg langt for
hjelpe pgsql-general pgsql-hackers Arkiv tilgjengelig p:
pgsql-interfaces http://archives.postgresql.org/ pgsql-jdbc
pgsql-novice IRC: irc.freenode.net/#postgresql pgsql-odbc En unik
kombinasjon av kompetanse og imtekommendehet pgsql-performance
pgsql-php pgsql-sql
108. Webressurser http://techdocs.postgresql.org/ Tekniske
artikler og ymse General Bits av A. Elein Mustain
http://www.varlena.com/GeneralBits Ukentlig oppsummering av
pgsql-general-listen PGSearch: http://www.pgsql.ru/db/pgsearch
Skemotor basert p PostgreSQL og TSearch2
109. pg_live Knoppix-basert live-CD med PostgreSQL Satt sammen
av Robert Bernier Nyeste versjon er 1.3.3, 8. februar 2005
http://www.sraapowergres.com +
/en/newsletter/issue_02/pg_live/pg_live.1.3.3.iso