bli kjent med postgresql!

114
Bli kjent med Bergen Linux User Group, 24. februar 2005 Oddbjørn Steffensen, IT Drift

Upload: oddbjorn-steffensen

Post on 29-Nov-2014

7.387 views

Category:

Technology


10 download

DESCRIPTION

Norskspråklig kortfattet introduksjon til PostgreSQL

TRANSCRIPT

  • 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
  • 9. Releasehistorikk Forbedret ytelse Forenklet vedlikehold og administrasjon Etterlevelse 24/7-bruk Crash av SQL 1.09 6.1 6.3 7.2 6.0 7.0 8.0 6.5 7.1 7.4 6.2 6.4 7.3 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 LoC 178 383 508 7.4.0 2003-11-17 7.4.1 2003-12-22 7.4.2 2004-03-08 Punktrevisjoner krever normalt 7.4.3 2004-06-14 ikke relast av databaser 7.4.4 2004-08-16 7.4.5 2004-08-18 7.4.6 2004-10-22
  • 10. Praktisk bruk av PostgreSQL
  • 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)
  • 47. Indeksering PostgreSQL sttter indekseringsalgoritmer: B-tree (default) R-tree Hash, og GiST
  • 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
  • 62. postgresql.conf: Connection Settings tcpip_socket = false max_connections = 20 #superuser_reserved_connections = 2 port = 5432 [..]
  • 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}
  • 78. Slony-I: Grafisk beskrivelse Master Cascading Slave Niv 1 Slave Slave Niv 1 Niv 1 Bergen Slave Slave Niv 2 Niv 2 Oslo
  • 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])
  • 93. Bruk av PostgreSQL fra PHP http://www.php.net/manual/en/ref.pgsql.php $conn = pg_connect(quot;dbname=testdbquot;); if (!$conn) { print(quot;Connection Failed.quot;); exit; } $query = SELECT posted_date,posted_time,news FROM news; $news = pg_query($conn, $query); echo quot;nquot;; for($i = 0; $i < pg_num_rows($news); $i++) { echo quot;nquot;; echo quot; . pg_result($news, $i, 0) . quot;nquot;; echo quot;quot; . pg_result($news, $i, 1) . quot;nquot;; echo quot;quot; . pg_result($news, $i, 2) . quot;nquot;; echo quot;quot;; } echo quot;quot;;
  • 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
  • 110. Relevante bker #1 http://www.postgresql.org/docs/books/awbook.html http://www.commandprompt.com/ppbook/
  • 111. Relevante bker #2
  • 112. Sprsml? Presentasjonen tilgjengelig p: http://www.tricknology.org/foilware/ [email protected]
  • 113. Uh oh...
  • 114. Del 1 av Bli kjent med!-serien