Your SlideShare is downloading. ×
0
Bli kjent med



Bergen Linux User Group, 24. februar 2005
     Oddbjørn Steffensen,    IT Drift
Bakgrunn for presentasjonen
  Dette er ikke...
     en introduksjon til relasjonsdatabaser eller SQL
     en uttømmende tu...
Agenda
1.   Bakgrunn                                       3+6      slides
2.   Praktisk bruk av PostgreSQL               ...
PostgreSQL: Bakgrunn
Hva er PostgreSQL?
  PostgreSQL er en:
     avansert
     fritt tilgjengelig open source
     relasjonsdatabaseserver


  ...
Bakgrunn for PostgreSQL

Fra INGRES til POSTGRES: 1977-1994
   Michael Stonebraker, professor ved UC @ Berkeley fra 1971

...
PostgreSQL Global Developments Team
  Thomas Lockhart
  Jolly Chen
  Vadim Mikheev
  Jan Wieck
  Andrew Yu
  Tom Lane
  Br...
PostgreSQL utviklingsmetodikk
  Kjerneteam               (a la FreeBSD)

  Kildekoden i CVS         (a la FreeBSD)

  http...
Releasehistorikk
                                                   Forbedret ytelse
                                     ...
Praktisk bruk av
  PostgreSQL
Installasjon av PostgreSQL
  FreeBSD:
   #    cd /usr/ports/databases/postgresql80-server
   #    sudo make install distcl...
Initialisering av PostgreSQL
pgsql@home> initdb
The files belonging to this database system will be owned by user quot;pgs...
Etablering av database
oddbjorn@home ~> createdb demo
createdb: database creation failed: ERROR: permission denied to crea...
psql: Den primære kommandolinjeklienten
Usage:
  psql [OPTIONS]... [DBNAME [USERNAME]]

General options:
  -d DBNAME      ...
psql: ? lister psqls interne kommandoer

General
                                                                        I...
psql: d: Describe
 d [NAME]       describe table, index, sequence, or view

 d{t|i|s|v|S} [PATTERN] (add quot;+quot; for m...
psql: d-eksempel
 testdb=> CREATE TABLE my_table (
 testdb(> first integer not null default 0,
 testdb(> second text
 test...
psql: h: SQL-hjelp
 ABORT                       CREATE LANGUAGE         DROP TYPE
 ALTER AGGREGATE             CREATE OPER...
CREATE / ALTER / DROP av objekter
  AGGREGATE          OPERATOR
  CAST               RULE
  CONSTRAINT         SCHEMA
  CO...
SQL-transaksjoner + vedlikehold
  Oppdatering av data
     INSERT / UPDATE / DELETE
     COPY
     TRUNCATE

  Spørringer
...
SQL: Annet
  Transaksjoner
      BEGIN / ABORT / ROLLBACK / CHECKPOINT / COMMIT
      SET TRANSACTION / START TRANSACTION ...
psql: h select: Informasjon om kommando
testdb=> h select
Command:     SELECT
Description: retrieve rows from a table or v...
psql: Ymse egenskaper
  Bruk av psql i batch:
    psql –f fil.sql dbnavn
    program | psql –f - dbnavn

  Readline-støtte...
psql: Kopiering av data i bulk: COPY
  Laster inn rå tabseparerte datafiler i èn transaksjon

  Fordel:    går raskt
  Ule...
pgAdmin III
  Fritt tilgjengelig grafisk
  administrasjonsverktøy for
  PostgreSQL

  Kjører på:
     Linux,
     FreeBSD ...
pgAdmin III: Screenshots
phpPgAdmin
Pgbash
home ~> pgbash
Welcome to Pgbash version 7.3 ( bash-2.05a.0(1)-release )

 Type   '?' for HELP.
 Type   'connect to...
Andre kommandoer
  Administrative verktøy
    pg_ctl             – start, stop eller restart av server
    pg_config      ...
Contrib
  Egen contrib-distribusjon, med dels utvidelser og dels støttefunksjonalitet:

  dblink         - Allows remote q...
PostgreSQL: Egenskaper
Overordnede egenskaper
  Fritt tilgjengelig; ingen lisenskostnader å tenke på

  Ekstremt robust gjennom mange år

  Desig...
Egenskaper
                                              SQL-støtte
  Database
      Fullt ut ACID-kompatibel             ...
Etterlevelse av SQL-standarden
  SQL-standarden
    ISO/IEC 9075 “Database Language SQL”
    Sist revidert i 2003, aka ISO...
Egenskaper for å sikre integritet: ACID
  Atomisk       / Atomic
     En transaksjon er udelelig – ”alt eller intet”


  K...
MultiVersion Concurrency Control (MVCC)
   I motsetning til tradisjonell rad-låsing ved oppdateringer,
   vedlikeholder MV...
Transaksjoner
                         Tett knyttet til ACID/MVCC er transaksjonsbegrepet:
                           En t...
Views
  Et view maskerer en spørring bak en virtuell tabell; fordeler:
     Konsistent grensesnitt selv om tabeller i bakg...
Schemas
  Schemas er en måte å dele opp namespace internt i
  en database, omtrent som filkataloger (bare ett nivå):
     ...
Constraints
  Datatypene som definerer kolonnene i en tabell gir
  begrensninger på hvilke data som kan legges inn

  Cons...
Triggere
  En trigger kan defineres til å eksekvere før eller
  etter en INSERT, UPDATE eller DELETE, enten per
  statemen...
Inheritance / Arv
  Arv i PostgreSQL er samme konsept som arv mellom
  objekter i objektorienterte språk som C++

  En tab...
Eksempel på inheritance
  CREATE TABLE capitals (
     name text,
     population real,
     altitude int, -- (in ft)
    ...
Cursorer / Markører
  Cursorer gir oss muligheten for å for å hente ut
  resultatsettet i lettfordøyelige blokker av rader...
Sekvenser
testdb=> CREATE TABLE tabell (
   id    integer default nextval('news_id') UNIQUE not
   NULL,
   news       tex...
Subqueries
  Subqueries som en konstant:
   SELECT f1.firstname, f1.lastname, f1.state
     FROM friend f1
     WHERE f1.s...
Indeksering
  PostgreSQL støtter indekseringsalgoritmer:
    B-tree (default)
    R-tree
    Hash, og
    GiST
Write-Ahead Logging (WAL)
  Standard teknikk for transaksjonslogging
    Endringer i datafiler kan bare skrives etter at
 ...
Nytt i versjon 8.0
  7.0 lansert i midten av 2000, så 4.5 år med utvikling
    8 måneder med utvikling i forhold til 7.x
 ...
Tablespaces
   I PostgreSQL < 8 måtte man bruke symlinker for å legge
   ulike datafiler på ulike partisjoner

   Tablespa...
Savepoints
                    Savepoints gir oss muligheten til å håndtere feil inne i
                    transaksjoner ...
Point-In-Time Recovery
  I PostgreSQL < 8, var den eneste måten å komme
  seg videre etter et diskcrash enten å:
    Gjens...
Støtte for, eh, Windows #1
  Har tidligere vært tilgjengelig via Cygwin, nå native
  Støtter 2000, XP & 2003
  Kan kjøre s...
Støtte for, eh, Windows #2
  Inkluderer følgende add-ons:
    Npgsql
    JDBC
    psqlODBC
    pgAdmin III
PostgreSQL bak kulissene
Overordnet arkitektur




Klientprosesser                                               Serverprosesser
                  ...
Hva skjer med en spørring?
                                          1.   Spørring ankommer via en socket,
               ...
Tuning: EXPLAIN
     PostgreSQL lager en query plan for hver spørring
     Viktig redskap for å forstå og tune spørringer ...
Tuning: ANALYZE
testdb=> ANALYZE   VERBOSE syslog;
INFO: analyzing    quot;public.syslogquot;
INFO: quot;syslogquot;:    3...
Tuning: VACUUM
VACUUM må kjøres periodisk av følgende årsaker:
1. Frigjøre diskplass brukt av oppdaterte eller slettede ra...
Katalogstruktur #1
/usr/local/pgsql/data
   PG_VERSION           f.eks. ”8.0”
   postgresql.conf      konfigurasjonfil
   ...
postgresql.conf: Connection Settings
tcpip_socket = false
max_connections = 20
#superuser_reserved_connections = 2
port = ...
postgresql.conf: Resource Settings

# - Memory -

shared_buffers = 1000           # min 16, at least max_connections*2, 8K...
postgresql.conf: Annet
  Security & Authentication
  Write Ahead Log
      Settings
      Checkpoints
  Query Tuning
     ...
Tilgangskontroll: pg_hba.conf
#   PostgreSQL Client Authentication Configuration File
#   ================================...
Sjekk av status: pg_controldata
home ~> pg_controldata /usr/local/pgsql/data
pg_control version number:            72
Cata...
Systemkatalogen & Information schema
  Systemkatalogen: pg_catalog
    Systemkatalogen er et schema som inneholder
    Pos...
Systemkatalogene (grafisk)
Datatyper iflg. systemkatalogen: dT+ i psql
 List of data types
   Schema   |             Name            | Internal name ...
Innebygde datatyper
Nettverkstyper
   Følgende tre datatyper:
        inet       - host eller nettmaske, fex. 10.0.0.1
        cidr       - ne...
Funksjoner og operatorer
Støtte for regulære uttrykk
  Støtte for flere former for pattern matching:
     SQL LIKE-operatøren
     SQL99 SIMILAR TO...
psql: Liste systemkatalogen
test=> dS
 List of relations
   Schema   |              Name                  | Type        | ...
Utvidelse av SQL-reportoaret
  SQL-støtten i PostgreSQL kan utvides vha. bla. følgende:
     funksjoner
     aggregater (m...
Replikeringsløsninger
Slony-I
  En “master to multiple slaves” replikeringsløsning
     Utvikles av Jan Wieck
     Slony er russisk flertall for...
Slony-I: Grafisk beskrivelse


         Master


                                                      Cascading
         ...
Andre replikeringsløsninger
  pgcluster
      Synkron replikering inkl. lastbalansering
      http://pgcluster.projects.po...
Programmering
mot PostgreSQL
Språk: Frontend versus backend
  Frontend: Språk for å aksessere data fra ’utsiden’,
  fex. script eller applikasjoner

  ...
Funksjoner i andre språk enn SQL&C
  PostgreSQL støtter brukerdefinerte funksjoner i et assortert
  utvalg språk ut over S...
Bruk av språk
createlang plperl dbname

CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $$
if ($_[0] > $_[1...
PL/pgSQL
 PL/pgSQL er et lastbart prosedyrespråk

 Støtter:
    Definering av funksjoner og triggere
    Kontrollstrukture...
PL/pgSQL: Eksempel #1
CREATE FUNCTION tax(numeric)
  RETURNS numeric
  AS ‘SELECT ($1 * 0.06::numeric(8,2))::numeric(8,2);...
PL/pgSQL: Eksempel #2
CREATE TABLE emp (empname text, salary int4,
                  last_date datetime, last_user name);
...
pl/R
  R er et integrert miljø for manipulering av data, beregninger
  og grafisk visning
       Nært basert på AT&Ts S

 ...
pl/R: Plotting av brannvegglogger

BEGIN;

CREATE TEMPORARY TABLE
  mytemp(id serial, hit int, source_ip inet)
  ON COMMIT...
Andre grensesnitt
  psqlODBC
      This is the most common interface for Windows applications.
  pgjdbc
      A JDBC inter...
Bruk av PostgreSQL fra Perl
    DBI / DBD::Pg / DBD::PgPP (ikke libpq-basert)

#!/usr/local/bin/perl –w

use DBI;

$dbh = ...
Bruk av PostgreSQL fra Python #1
  PygreSQL
    Eldst og velprøvd
    Nær libpq
    http://www.pygresql.org


  psycopg
  ...
Bruk av PostgreSQL fra Python #2
import psycopg

o = psycopg.connect('dbname=mydb user=fog')

c = o.cursor()
c.execute('SE...
Bruk av PostgreSQL fra PHP
  http://www.php.net/manual/en/ref.pgsql.php

$conn = pg_connect(quot;dbname=testdbquot;);

if ...
ODBC & JDBC
 ODBC
   http://odbc.postgresql.org/


 JDBC
   Ren Java-implementasjon
   Støtter JDBC v3 + utvidelser
   htt...
Tredjepartsløsninger
  (noe redusert pga. omfanget på resten)
Autodoc
  Dokumenterer en PostgreSQL-database

  Template-basert rapportering til:
    HTML
    Dot
    Dia
    Docbook XML
Autodoc: Eksempler #1




     HTML               Docbook
Autodoc: Eksempler #2


dia




                          graphviz
PostGIS

  PostGIS implementerer støtte for “spatial data”

  Data som beskriver lokasjon eller form
    Punkter
    Linje...
PostGIS: Eksempel
  CREATE TABLE pubs (name VARCHAR, beer_price FLOAT4);
  ADDGEOMETRYCOLUMN (‘beer_db’,'pubs','location’ ...
Hvordan komme i gang?
www.postgresql.org
Dokumentasjon #1
Dokumentasjon #2

                   1332
                   sider!
http://pgfoundry.org
http://gborg.postgresql.org/
Mailinglister & IRC
                                                         pgsql-admin
                                 ...
Webressurser
  http://techdocs.postgresql.org/
    Tekniske artikler og ymse


  General Bits av A. Elein Mustain
    http...
pg_live
  Knoppix-basert live-CD med PostgreSQL
    Satt sammen av Robert Bernier
    Nyeste versjon er 1.3.3, 8. februar ...
Relevante bøker #1




• http://www.postgresql.org/docs/books/awbook.html
• http://www.commandprompt.com/ppbook/
Relevante bøker #2
Spørsmål?

     Presentasjonen tilgjengelig på:
        http://www.tricknology.org/foilware/




    oddbjorn@tricknology....
Uh oh...
Del 1 av ”Bli kjent med!”-serien
Upcoming SlideShare
Loading in...5
×

Bli kjent med PostgreSQL!

6,618

Published on

Norskspråklig kortfattet introduksjon til PostgreSQL

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
6,618
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Bli kjent med PostgreSQL!"

  1. 1. Bli kjent med Bergen Linux User Group, 24. februar 2005 Oddbjørn Steffensen, IT Drift
  2. 2. Bakgrunn for presentasjonen Dette er ikke... en introduksjon til relasjonsdatabaser eller SQL en uttømmende 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 fornøyd bruker samme ”wow”-følelsen som da jeg konverterte til FreeBSD i 1996 etter 3-4 år med Linux-bruk... Hvorfor nå? Versjon 8.0 er akkurat lansert!
  3. 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. Replikeringsløsninger 4 slides 6. Bruk av PostgreSQL fra ulike språk 15 slides 7. Tredjepartsverktøy 6 slides 8. Hvordan komme i gang! 11 + 3 slides ~45 minutter 10 minutter pause ~45 minutter nn minutter med spørsmål og muligens svar
  4. 4. PostgreSQL: Bakgrunn
  5. 5. Hva er PostgreSQL? PostgreSQL er en: avansert fritt tilgjengelig open source relasjonsdatabaseserver Støtter mye av SQL-standarden + avanserte egenskaper: Komplekse spørringer (bla. subselects) Fremmednøkler Triggere Views Transaksjonsintegritet (ACID) Multiversion concurrency control (MVCC) BSD-lisens (”gjør hva du vil, men ikke skyld på oss”)
  6. 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 Oppkjøpt av CA i 1994, som opensourcet CA Ingres høsten 2004 Jobbet videre med POSTGRES fra 1986 En videreføring av INGRES med fokus på objektorientering / Quel Kodebasen fra INGRES ble ikke videreført Kommersialisert som Illustra (kjøpt av Informix, kjøpt av IBM) Fra POSTGRES til PostgreSQL: 1994-1996 SQL-støtte 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. 7. PostgreSQL Global Developments Team Thomas Lockhart Jolly Chen Vadim Mikheev Jan Wieck Andrew Yu Tom Lane Bruce Momjian Marc Fournier
  8. 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. 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. 10. Praktisk bruk av PostgreSQL
  11. 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. 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. 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. 14. psql: Den primære 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. 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 <table> 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. 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. 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. 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. 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. 20. SQL-transaksjoner + vedlikehold Oppdatering av data INSERT / UPDATE / DELETE COPY TRUNCATE Spørringer SELECT SELECT INTO Rettigheter GRANT / REVOKE Vedlikehold EXPLAIN ANALYZE VACUUM
  21. 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. 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. 23. psql: Ymse egenskaper Bruk av psql i batch: psql –f fil.sql dbnavn program | psql –f - dbnavn Readline-støtte (!) 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. 24. psql: Kopiering av data i bulk: COPY Laster inn rå tabseparerte datafiler i èn transaksjon Fordel: går raskt Ulempe: dersom èn rad ikke blir akseptert, forkastes alle radene copy tabellnavn from ’filename’ psql støtter også last av store objekter (lo_*)
  25. 25. pgAdmin III Fritt tilgjengelig grafisk administrasjonsverktøy for PostgreSQL Kjører på: Linux, FreeBSD & Windows Versjon 1.2 støtter 8.0
  26. 26. pgAdmin III: Screenshots
  27. 27. phpPgAdmin
  28. 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. 29. Andre kommandoer Administrative verktøy pg_ctl – start, stop eller restart av server pg_config – dumper config-informasjon Dump & restore pg_dump og pg_dumpall Førstnevnte 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. 30. Contrib Egen contrib-distribusjon, med dels utvidelser og dels støttefunksjonalitet: 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. 31. PostgreSQL: Egenskaper
  32. 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, kjører på ”alle” relevante plattformer Utvidbar, med godt dokumenterte API for å legge til funksjonalitet Flere ulike alternativ for høytilgjengelighet / replikering Veldig god de facto support, med mulighet for kommersiell support for de som ønsker det
  33. 33. Egenskaper SQL-støtte Database Fullt ut ACID-kompatibel God ANSI SQL-støtte Fremmednøkler (referential integrity) Rules Bedre enn rad-nivå låsing (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. 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 forsøker å etterleve standarden der det er mulig uten å ødelegge bakoverkompatibilitet og ”sunn fornuft” Mye av SQL:2003 er støttet, men iblant med noe forskjellig syntax Det arbeides med å ytterligere forbedre etterlevelsen 255 krav (58%) etterlevd, 184 (42%) er ikke etterlevd.
  35. 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 nødvendigvis er konsistent underveis Isolert / Isolated Transaksjoner berøres ikke av konsekvensene til andre transaksjoner som kjøres samtidig Holdbarhet / Durable Når en transaksjon har gjort COMMIT, er endringene permanent lagret, også etter et havari
  36. 36. MultiVersion Concurrency Control (MVCC) I motsetning til tradisjonell rad-låsing ved oppdateringer, vedlikeholder MVCC flere versjoner av en gitt rad, og muliggjør derfor: 1. Hver transaksjon ser et snapshot slik databasen så ut ved transaksjonens start, uavhengig av hva andre transaksjoner gjør mens den kjører 2. Leseoperasjoner blokkerer ikke skriveoperasjoner 3. Skriveoperasjoner blokkerer ikke leseoperasjoner 4. Skriveoperasjoner blokkerer bare når de oppdaterer samme rad En annen fordel med MVCCs snapshot er muligheten for varme backuper Se “Transaction Processing in PostgreSQL” av Tom Lane
  37. 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 oppstår 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. 38. Views Et view maskerer en spørring 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 støtter foreløpig ikke materialserte views, dvs. lagring av resultatet av spørringer bak views (nyttig ifb. datavarehus / analytiske databaser).
  39. 39. Schemas Schemas er en måte å 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 større database (Ingen føringer 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. 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 være hel- eller flyttall, men i tillegg bare positive verdier PostgreSQL støtter fem former for constraints Check - price numeric CHECK (price > 0) Not NULL - product_no integer NOT NULL Unikhet - product_no integer UNIQUE Primærnøkler - Unik + !NULL: PRIMARY KEY (a, c) Fremmednøkler - product_no integer REFERENCES products (product_no),
  41. 41. Triggere En trigger kan defineres til å eksekvere før 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å være definert i et prosedyrespråk
  42. 42. Inheritance / Arv Arv i PostgreSQL er samme konsept som arv mellom objekter i objektorienterte språk som C++ En tabell som arver en annen får med seg alle kolonner fra foreldretabellen. Kan også begrense spørringer til foreldretabeller: SELECT a, b from ONLY tableA Støttes også av UPDATE, DELETE og andre Ikke fullt ut integrert med unike begrensninger eller fremmednøkler
  43. 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. 44. Cursorer / Markører Cursorer gir oss muligheten for å for å hente ut resultatsettet i lettfordøyelige blokker av rader. Dette kan bidra til å unngå ressursproblemer på klientsiden, og muliggjør retur av referanse til en cursor i stedet for resultatsettet
  45. 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. 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 støttes: 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. 47. Indeksering PostgreSQL støtter indekseringsalgoritmer: B-tree (default) R-tree Hash, og GiST
  48. 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 Muliggjør online backup og point-in-time recovery
  49. 49. Nytt i versjon 8.0 7.0 lansert i midten av 2000, så 4.5 år med utvikling 8 måneder med utvikling i forhold til 7.x Totalt 17 sider med endringer 5 måneder med betatesting Mål: Gjøre 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 støtte for Windows (~10 årsverk)
  50. 50. Tablespaces I PostgreSQL < 8 måtte 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 Større fleksibilitet til å legge til plass når en disk går full CREATE TABLESPACE fastspace LOCATION ’/disk1/pgsql/data’; CREATE TABLE foo(i int) TABLESPACE fastspace;
  51. 51. Savepoints Savepoints gir oss muligheten til å håndtere feil inne i transaksjoner på en grasiøs måte, uten nødvendigvis å måtte avbryte hele transaksjonen Endringer før savepoint gjennomføres 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. 52. Point-In-Time Recovery I PostgreSQL < 8, var den eneste måten å komme seg videre etter et diskcrash enten å: Gjenskape data fra backup, eller Bruke en replikerende server Point-in-time recovery muliggjør kontinuerlig backup av serveren: Write-ahead log’en (WAL) beskriver alle endringer; ved å ta backup av denne, kan vi ”spole” databasetilstanden frem og tilbake. PITR baserer seg på løpende overføring av WAL til failovermaskine, basert på en fritt valgt arkiverings- mekanisme Recover frem til crashtidspunktet, eller et vilkårlig valgt tidspunkt
  53. 53. Støtte for, eh, Windows #1 Har tidligere vært tilgjengelig via Cygwin, nå native Støtter 2000, XP & 2003 Kan kjøre som service Installer som fungerer rimelig bra:
  54. 54. Støtte for, eh, Windows #2 Inkluderer følgende add-ons: Npgsql JDBC psqlODBC pgAdmin III
  55. 55. PostgreSQL bak kulissene
  56. 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 Spørringer 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. 57. Hva skjer med en spørring? 1. Spørring ankommer via en socket, legges i en streng Postgres 2. Lex/yacc parser strengen, og type spørring identifiseres Parser 3. Hvis kompleks spørring 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. Gjennomfører henting av data, sort, joins, kvalifiseringer av data og leverer til slutt resultatet
  58. 58. Tuning: EXPLAIN PostgreSQL lager en query plan for hver spørring Viktig redskap for å forstå og tune spørringer 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 målt 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 spørringen resulterer i 4. Bredde målt i bytes per rad som spørringen resulterer i (Mye mer info): Efficient SQL, OSCON 2003 http://www.gtsm.com/oscon2003/toc.html
  59. 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. 60. Tuning: VACUUM VACUUM må kjøres periodisk av følgende årsaker: 1. Frigjøre 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 kjøres parallellt med vanlig bruk av databasen pg_autovacuum contrib-klient som overvåker alle databaser i en PostgreSQL-instans Bruker statistikkinnsamlingen til å overvåke INSERT-, UPDATE- og DELETE-aktiviteten Starter automagisk VACUUM når definerte grenseverdier overstiges
  61. 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. 62. postgresql.conf: Connection Settings tcpip_socket = false max_connections = 20 #superuser_reserved_connections = 2 port = 5432 [..]
  63. 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. 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. 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. 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. 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. 68. Systemkatalogene (grafisk)
  69. 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 | @ <number> <units>, 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. 70. Innebygde datatyper
  71. 71. Nettverkstyper Følgende 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 << ’192.168.1.0/24’ 4. trunc(macaddr)
  72. 72. Funksjoner og operatorer
  73. 73. Støtte for regulære uttrykk Støtte for flere former for pattern matching: SQL LIKE-operatøren SQL99 SIMILAR TO-operatøren POSIX-style regulære uttrykk Eksempel på sistnevnte: ’abc’ ~ ’abc’ true ’abc’ ~ ’^a’ true ’abc’ ~ ’(b|d)’ true ’abc’ ~ ’^(b|c)’ false
  74. 74. psql: Liste systemkatalogen test=> 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. 75. Utvidelse av SQL-reportoaret SQL-støtten i PostgreSQL kan utvides vha. bla. følgende: 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. 76. Replikeringsløsninger
  77. 77. Slony-I En “master to multiple slaves” replikeringsløsning Utvikles av Jan Wieck Slony er russisk flertall for elefant http://www.slony.info Støtter: etablering av en replika ”i fart” asynkron replikering enhver replika kan overta for enhver annen node promotering av slave til master hvis master dør Slony-2 kommer til å støtte multi-master Introducing Slony & Building and Configuring Slony A. Elein Mustain http://www.onlamp.com/lpt/a/{5328,5486}
  78. 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. 79. Andre replikeringsløsninger 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 sekundær server når primær går ned Replikering ved ag pgpool sender transaksjonene parallellt til hver server (synkron replikering) eRServer Trigger-basert single-master/multi-slave asynkron replikeringsløsning 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. 80. Programmering mot PostgreSQL
  81. 81. Språk: Frontend versus backend Frontend: Språk for å aksessere data fra ’utsiden’, fex. script eller applikasjoner Backend: Språk for å utvide funksjonaliteten internt i databaseserveren Praktisk talt alle språkene kan benyttes i begge roller Klassisk avveining om funksjonalitet skal ligger i databasen eller i applikasjonen
  82. 82. Funksjoner i andre språk enn SQL&C PostgreSQL støtter brukerdefinerte funksjoner i et assortert utvalg språk ut over SQL og C. PL/pgSQL PL/Tcl PL/Perl PL/Python PL/PHP PL/Java / pl-j PL = procedural languages Andre språk kan defineres av brukeren PostgreSQL forholder seg ikke til kildekoden; overfører bare kallet til en handler som deretter fungerer som lim i forhold til det aktuelle språket.
  83. 83. Bruk av språk 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. 84. PL/pgSQL PL/pgSQL er et lastbart prosedyrespråk Støtter: 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, unngår overhead med klient/tjener- arkitekturen
  85. 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. 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. 87. pl/R R er et integrert miljø for manipulering av data, beregninger og grafisk visning Nært basert på AT&Ts S R inkluderer: effektiv håndtering og lagring av data operatorer for beregninger over tabeller og matriser et større antall koherente og integrerte verktøy for analyse av data verktøy for å generere høykvalitets grafer, både til skjerm og print et modent programmeringsspråk for å knytte det hele sammen PL/R er et lastbart prosedyrespråk som muliggjør 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. 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 <- paste(quot;SELECT id as x,hit as y FROM mytemp LIMIT 30quot;,sep=quot;quot;); str <- c(pg.spi.exec(sql)); mymain <- quot;Graph 2quot;; mysub <- paste(quot;The worst offender is: quot;,str[1,3],quot; with quot;,str[1,2],quot; hitsquot;,sep=quot;quot;); myxlab <- quot;Top 30 IP Addressesquot;; myylab <- quot;Number of Hitsquot;; pdf(''/tmp/graph2.pdf''); plot(str,type=quot;bquot;,main=mymain,sub=mysub,xlab=myxlab,ylab=myylab,lwd=3); mtext(quot;Probes by intrusive IP Addressesquot;,side=3); dev.off(); print(''DONE''); ' LANGUAGE plr; -- now generating the graph SELECT f_graph2(); COMMIT;
  89. 89. Andre grensesnitt psqlODBC This is the most common interface for Windows applications. pgjdbc A JDBC interface. Npgsql .Net interface for more recent Windows applications. libpqxx A newer C++ interface. libpq++ An older C++ interface. pgperl A Perl interface with an API similar to libpq. DBD-Pg A Perl interface that uses the DBD-standard API. pgtclng A newer version of the Tcl interface. pgtcl The original version of the Tcl interface. PyGreSQL A Python interface library.
  90. 90. Bruk av PostgreSQL fra Perl DBI / DBD::Pg / DBD::PgPP (ikke libpq-basert) #!/usr/local/bin/perl –w use DBI; $dbh = DBI->connect('dbi:Pg:dbname=testdb;', ‘username', ''); $sth = $dbh->prepare(“SELECT id,news from news”); $sth->execute; while (@news = $sth->fetchrow) { $date = $news[0]; $article = $news[1]; print(“$date:t $articlen”); }
  91. 91. Bruk av PostgreSQL fra Python #1 PygreSQL Eldst og velprøvd Nær 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. 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. 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;<table border=1>nquot;; for($i = 0; $i < pg_num_rows($news); $i++) { echo quot;<tr>nquot;; echo quot;<td>” . pg_result($news, $i, 0) . quot;</td>nquot;; echo quot;<td>quot; . pg_result($news, $i, 1) . quot;</td>nquot;; echo quot;<td>quot; . pg_result($news, $i, 2) . quot;</td>nquot;; echo quot;</tr>quot;; } echo quot;</table>quot;;
  94. 94. ODBC & JDBC ODBC http://odbc.postgresql.org/ JDBC Ren Java-implementasjon Støtter JDBC v3 + utvidelser http://jdbc.postgresql.org/ Begge tilgjengelig som FreeBSD-ports
  95. 95. Tredjepartsløsninger (noe redusert pga. omfanget på resten)
  96. 96. Autodoc Dokumenterer en PostgreSQL-database Template-basert rapportering til: HTML Dot Dia Docbook XML
  97. 97. Autodoc: Eksempler #1 HTML Docbook
  98. 98. Autodoc: Eksempler #2 dia graphviz
  99. 99. PostGIS PostGIS implementerer støtte for “spatial data” Data som beskriver lokasjon eller form Punkter Linjer Polygoner samt funksjoner mhp. forhold disse i mellom: Avstand Nærhet (”touching” og ”connectivity”) Inneholder (”inside” og ”overlapping”)
  100. 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. 101. Hvordan komme i gang?
  102. 102. www.postgresql.org
  103. 103. Dokumentasjon #1
  104. 104. Dokumentasjon #2 1332 sider!
  105. 105. http://pgfoundry.org
  106. 106. http://gborg.postgresql.org/
  107. 107. Mailinglister & IRC pgsql-admin pgsql-advocacy Et assortert utvalg mailinglister er tilgjengelig: pgsql-announce http://www.postgresql.org/community/lists/subscribe Generelt høyt volum pgsql-bugs Høy 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 imøtekommendehet pgsql-performance pgsql-php pgsql-sql
  108. 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 Søkemotor basert på PostgreSQL og TSearch2
  109. 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. 110. Relevante bøker #1 • http://www.postgresql.org/docs/books/awbook.html • http://www.commandprompt.com/ppbook/
  111. 111. Relevante bøker #2
  112. 112. Spørsmål? Presentasjonen tilgjengelig på: http://www.tricknology.org/foilware/ oddbjorn@tricknology.org
  113. 113. Uh oh...
  114. 114. Del 1 av ”Bli kjent med!”-serien
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×