INSTALLAZIONE #
Installare i pacchetti postgresql postgresql-client postgresql-contrib
TUNING#
Per un tuning di base di postgres si può utilizzare questa utility: pg-tune
Per una macchina con circa 4GB una configurazione "decente" di postgres potrebbe essere questa:
maintenance_work_mem = 288MB # pgtune wizard 2010-02-24 checkpoint_completion_target = 0.7 # pgtune wizard 2010-02-24 effective_cache_size = 3584MB # pgtune wizard 2010-02-24 work_mem = 24MB # pgtune wizard 2010-02-24 wal_buffers = 4MB # pgtune wizard 2010-02-24 checkpoint_segments = 8 # pgtune wizard 2010-02-24 shared_buffers = 960MB # pgtune wizard 2010-02-24 max_connections = 200 # pgtune wizard 2010-02-24
Se si aumentano le connessioni e lo shared_buffers di postgres è possibile/probabile che serva aumentare anche la shared memory di linux questo è possibile attraverso questi comandi:
cp /etc/sysctl.conf /etc/sysctl.conf-orig vi /etc/sysctl.conf
Aggiungere la riga con il valore appropriato:
kernel.shmmax = 104857600
Salvare il file e far ricaricare i parametri al kernel con:
sysctl -p
PROBLEMONE SU ENCODING / LOCALE#
Attenzione alla creazione del database con ENCODING ISO-8859-1 per caratteri strani:il problema nasce dal fatto che postgres 8.3 non mi fa cambiare il locale del server se non creando un nuovo cluster con il comando:
# backup configurazione originale
mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/main_original
# mi sposto nella directory ...
cd /usr/lib/postgresql/8.3/bin/
#creo cartella main
mkdir main
#permessi
chown postgres:postgres main -R
#creo nuova configurazione
./initdb --locale=it_IT.ISO-8859-1 -E=LATIN1 -D /var/lib/postgresql/8.3/main
#ricreo link simbolici certificati in /var/lib/postgresql/8.3/main
ln -s /etc/postgresql-common/root.crt root.crt
ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
#modifico file postgresql.conf
vi /etc/postgresql/8.3/main/postgresql.conf
#Sostituisco UTF8 con ISO-8859-1
....
# These settings are initialized by initdb, but they can be changed.
lc_messages = 'it_IT.ISO-8859-1' # locale for system error message
# strings
lc_monetary = 'it_IT.ISO-8859-1' # locale for monetary formatting
lc_numeric = 'it_IT.ISO-8859-1' # locale for number formatting
lc_time = 'it_IT.ISO-8859-1' # locale for time formatting
....
riavvio Postgres.
CONFIGURAZIONE BASE#
shell di postgress: su postgres psql postgres (in ubuntu: sudo -u postgres psql postgres) #creare super utente (da valutare) postgres= create user root with superuser login; #creare utente postgres= create user sqlgrey with password 'iehQ6Ffshvta93eP'; #creare database postgres= create database sqlgrey owner sqlgrey; eventualmente per settare encoding diverso (default è UTF-8) usare\\ ENCODING = encoding (ad esempio 'ISO8859-1') #creare schema postgres= create schema nomeschema; #abilitare connessioni in entrata editare /etc/postgresql/8.3/main/postgresql.conf listen_addresses = '*' password_encryption = on #editare /etc/postgresql/8.3/main/pg_hba.conf (client authentication) # TYPE DATABASE USER CIDR-ADDRESS METHOD local database user auth-method [auth-option] host database user CIDR-address auth-method [auth-option] hostssl database user CIDR-address auth-method [auth-option] hostnossl database user CIDR-address auth-method [auth-option] host database user IP-address IP-mask auth-method [auth-option] hostssl database user IP-address IP-mask auth-method [auth-option] hostnossl database user IP-address IP-mask auth-method [auth-option] #auth-method trust accetta connessioni senza pwd reject non accetta connessioni md5 MD5-encrypted password for authentication password pwd scambiata in chiaro krb5 usa kerberos 5 per autenticare il client ident ottiene il nome utente del sistema operativo dal client e controla se è abilitato alla connessione ldap autentica usando server LDAP pam Pluggable Authentication Modules
Comandi base#
settare uno schema(TUOSCHEMA):SET search_path TO TUOSCHEMA,public;Connettere a DB:
psql -U nomeutente nomedbFare dump di intero sistema:
pg_dumpall > allDb.sql
Comandi per backup db#
Dump del db con pg_dump//singola tabella pg_dump -c -U DBUSER DBNAME --table SCHEMA.TABLE -Fc > dbtable.dump //intero db di uno schema pg_dump -c -U DBUSER DBNAME --schema=SCHEMA -Fc > dbschema.dump //intero db (tutti gli schemi) pg_dump -c -U DBUSER DBNAME -Fc > dbname.dumpL'opzione -c indica a pg_dump di creare anche le istruzioni per il drop delle tabelle.
L'opzione --table serve per indicare di quale tabella fare il backup senza viene fatto il backup dell'intero DB.
L'opzione -F serve per il formato output del file (c custom, t tar).
L'opzione -U serve a specificare l'utente con il quale ci si collega al DB.
Il dump senza -F crea il salvataggio in text plain.
NB Per il restore del db da plainText utilizzare psql non pg_restore che funziona solo per formati custom o tar.
Restore del db con pg_restore
Solo per formati custom o tar (opzione -Fc o -Ft sul dump)
//restore singola tabella pg_restore -c -U DBUSER -d DBNAME -t TABLE -v -Fc db.dump ATTENZIONE: sulla singola tabella sembra che non ricrei gli indici (e quindi nemmeno le primary key) //restore singolo schema pg_restore -c -U DBUSER -d DBNAME --schema=SCHEMA -v -Fc db.dump //restore db completo pg_restore -c -U DBUSER -d DBNAME -Fc db.dumpL'opzione -c indica a pg_restore di eliminare le tabelle (drop) e ricrearla.
L'opzione -v è per il verbose.
L'opzione -F serve per il formato input del file (c custom, t tar).
L'opzione -d serve per specificare il dbname.
L'opzione -v = verbose.
L'opzione --data-only è per importare i soli dati e non ricrea table.
Caso Formato text plain :
psql -U DBUSER DBNAME -f dbname.dump
Import/export di dati #
export da pslq \f ',' \a \t \o outputfile.csv select ..... (your sql select statement) \o import da psql copy SCHEMA.TABLE from 'TABLE.vsc' using delimiters ',' CSV; se in fase di import (copy) da comando di linea (psql) ottieni un errore tipo ERROR: must be superuser to COPY to or from a file usare da linea di comando linux cat TUOFILE.csv | psql -U DBUSER -d DBNAME -c "copy SCHEMA.TABLE from stdin delimiter ',' CSV";
Gestione utenti#
loggandosi come utente pgsql postgres faccio alter user:alter user