PostGreSql

Postgresql, abbreviato anche in “postgres”, è un database relazione ad oggetti molto completo.

Di seguito alcuni dei principali comandi che si possono lanciare da terminale per gestire e controllare postgresql.

  • Il servizio, il server,  è in genere chiamato postgresql o postgresql più il numero di versione
  • Il client per postgresql da terminale è psql
  • Il client grafico di postgresql è pgadmin3
  • L’utente base del database è l’utente postgres

Avviare Fermare postgresql

service postgresql

{start|stop|status|restart|condrestart| condstop|reload|force-reload|initdb}

es: service postgresql restart 
sudo service postgresql status 
/etc/init.d/postgresql

{start|stop|status|restart| condrestart|condstop|reload|force-reload|initdb}

es: /etc/init.d/postgresql status 

Postgresql running
per verificare che postgresql sia attivo

ps axf | grep [p]ostgres 

per verificare che il server stia correttamente ascoltando sulla porta prescelta si può utilizzare il comando

netstat -nlp | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 10723/postgres
tcp6 0 0 :::5432 :::* LISTEN 10723/postgres

Ricaricare pg_hba.conf aseguito di modifica

 
su – postgres
pg_ctl reload
postgres=# select pg_reload_conf();   ##utilizzando postgresql cli

Configurazione postgresql

Due sono i file che usualmente vengono utilizzati per la configurazione del server postgresql postgresql.conf( settaggio porta di ascolto … ) e  pg_hda.conf  ( quali users possono accedere a quali databases e ccome possono farlo ).

Accedere alla console interattiva

psql test postgres
psql postgres postgres
psql -U postgres -W postgres -h 10.0.2.15 -p 5432
o
su - postgres
psql
exit per uscire

Help

\h help comandi SQL
\h SELECT
\h CREATE INDEX  

\? help comandi psql propri della console interattiva
\h select
\q exit console
\g o punto e virgola per eseguire la query

Mostra la versione di postgres

db=# select version();
Elenca databases da console interattiva

db=# \l
query
db=#
 SELECT datname FROM pg_database;

oppure elenca databases da terminale

$ psql -l

Cambia database da console interattiva

db=# \c eurotech ;

Elenca tabelle di un database da console interattiva

db=# \d
query
db=# SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’

Elenca colonne di una tabella di un database da console interattiva

db=# \d tabella
query
db=# SELECT column_name FROM information_schema.column WHERE table_name = ‘tabella‘ ;

db=# \d+ tabella

Users

Cambiare la password di un utente ed esempio con l’utente di riferimento postgres

db=# ALTER USER user WITH PASSWORD 'userpassword';
db=# ALTER USER postgres WITH PASSWORD 'YourPostgresPassword';

Creare un nuovo utente / role

db=# CREATE USER newuser WITH password 'userpassword';

Creare un nuovo “testuser” ROLE con superuser e password:

 db=# CREATE ROLE testuser WITH SUPERUSER LOGIN PASSWORD 'test';

Creare un nuovo utente dalla shell

/usr/local/pgsql/bin/createuser newuser

Permessi
Usare GRANT consente di definire i permessi a livello di database, tabella e di colonna
es.

GRANT ALL PRIVILEGES ON DATABASE eurotechgroup TO ethgrp;
GRANT SELECT ON mytable TO guest;

Mostra gli utenti di postgresql

db=#SELECT * from pg_user;

Mostra gli utenti connessi a postgresql

db=#SELECT usesysid, usename FROM pg_stat_activity;

Creare uno user di tipo read-only in un database postgresql

Database Crea/Delete

Creare un nuovo database dal terminale interattivo

db=# CREATE DATABASE newdb WITH OWNER postgres;

Creare un nuovo database dalla shell

su – postgres
/usr/local/pgsql/bin/createdb newdb -O postgres

Cancella un database

DROP DATABASE mydb;

Cancellare un database dalla shell

su – postgres
dropdb dbname

Se si utilizzano maiuscole nel nome del database in psql usare le ” ”  es.

DROP DATABASE myDB

BACKUP / RESTORE

Formato sql  per il backup 

Se si utilizza  il formato sql per effettuare il backup si possono usare i seguetni comandi per il backup restore

backup:
pg_dump -U user -h host db_dacopiare -p port -f dumpfile.sql
 $ pg_dump -U postgres -h 10.0.1.10 -p 5432 ethgroup2008 -f ethgroup2008.sql
restore:
 $ psql -U postgres -h 192.168.1.10 -W -d ethgroup2008 -f ethgroup2008.sql

Backup database in un server e ripristino in un altro server

per evitare username e password portarsi ad esempio sull’utente postgres,  il database deve essere presente nella macchina target diversamente va creato.

su - postgres

# creare il database nella macchina target  da terminale con un comando del tipo

createdb dbname

# esempi di comando per il trasferimento

pg_dump -h host_source dbname | psql -h host_target dbname
pg_dump dbname | psql -h host_target -d dbname
pg_dump -h host1 dbname -t mytable | psql -h host2 -d dbname
pg_dump -h host1 -U username -W dbname -t mytable | psql -h host2 -d dbname

Questi comandi possono essere efficacemente utilizzati specialmente su Tunnel ssh Tunnel via ssh per gestire il server postgresql anche con pgAdmin

Va considerato che nel server target sarebbe opportuno fossero già presenti gli utenti presenti nel server sorgente.

Backup di una tabella

# pg_dump --table catalogs -U tmpuser eurotechdb -f catalogs.sql

Ripristino di una tabella

psql -f catalogs.sql catalogs

Formato backup custom

backup:
pg_dump -Fc -U postgres -W ethgroup2008 -f ethgroup2008.backup

Restore:
pg_restore -h 10.0.1.10 -U postgres -c -W -d ethgroup2008 ethgroup2008.backup
  • -Fc formato compresso
  • -c drop database object prima di ricreareli
  • -C crea il database target
  • -f file output
  • -W password
  • -t = tabella
  • -a solo dati

Backup di tutti i database

pg_dumpall > alldb.sql
su – postgres
psql < alldb.sql

Visualizza i datatypes base

SELECT typname,typlen from pg_type where typtype='b';

Transazioni

Avviare una transazione

# BEGIN

rollback o commit a transazione

# ROLLBACK
# COMMIT

QUERY

Ovviamente la console interattiva consente di eseguire query dei vari tipi: select, update, insert …
In genere pero è preferibile passare per strumenti come pgadmin3 …
Di seguito alcune query di tipo generale

per cambiare database

\c biblioteca;

Display il piano di esecuzione di una query

EXPLAIN SELECT * FROM products;

Mostra il piano eseguendo la query sul lato server

EXPLAIN ANALYZE SELECT * FROM products;

EXPLAIN ANALYZE SELECT * FROM _getcatalog(300);

Query select per contare il numero di records in un tabella

per cambia database

\c     ethgroup2010U ;

quindi

select count(*) from catalogs;

Query di tipo count che ritorna il numero di records in un tabella data una spcifica colonna con valore diverso da null

select count(productline) from catalogs;

Aggiungere un contatore di record in una select

SELECT row_number() OVER() as rownum, table.* FROM table;

Conta il numero distinto di records data una spcifica colonna con valore diverso da null

select count(distinct productline) from catalogs;

Ottieni il minimo (MIN) o il massimo (MAX) valore di una colonna

# select MIN(ordercode) FROM products;

Ottieni il secondo

# SELECT MIN(ordercode) FROM products where ordercode > ( select MIN(ordercode) from productse );
# SELECT MAX(ordercode) FROM products where ordercode <( select MAX(ordercode) from productse );

Per inviare l’output di query select ad un file

# \o myoutput_file
# SELECT * FROM news;

ritorna l’output allo stdout
# \o

Ritorna dimensioni dei database e delle tabelle

Calcola le dimensioni di uno specifico database

SELECT pg_database_size(‘mydb’);

pg_size_pretty ritorna le dimensione in MB un formato più amichevole

SELECT pg_size_pretty(pg_database_size(‘mydb’));

pg_size_pretty ritorna le dimensione in MB un formato più amichevole

SELECT pg_size_pretty(pg_total_relation_size(‘big_table’));

Trova la tabella più grande del database selezionato

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

relpages: numero di pagine ( di default una pagina è 8Kb)
pg_class: system table, mantiene i dettagli delle relazioni

per ritornare l’ip del server postgres
SELECT * FROM inet_server_addr()

Memorizza la password dopo crittografia

SELECT crypt ( ‘erim’, gen_salt(‘md5’) );

PostgreSQL registra tutti i comandi eseguiti in un file chiamato ~/.psql_history

# cat ~/.psql_history

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*