User Tools

Site Tools


doc:appunti:linux:sa:postgresql

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
doc:appunti:linux:sa:postgresql [2009/02/19 23:53] – external edit 127.0.0.1doc:appunti:linux:sa:postgresql [2017/11/14 17:40] (current) – [Backup e restore di un database] niccolo
Line 28: Line 28:
 Crea utente con password:       CREATE USER "username" PASSWORD 'secret'; Crea utente con password:       CREATE USER "username" PASSWORD 'secret';
 Assegnare un DB ad un utente:   UPDATE pg_database SET datdba=104 WHERE datname='dbname'; Assegnare un DB ad un utente:   UPDATE pg_database SET datdba=104 WHERE datname='dbname';
-Creare un DB con tutto:         CREATE DATABASE dbname OWNER dbname ENCODING 'UTF8';+Creare un DB con tutto:         CREATE DATABASE dbname OWNER dbuser ENCODING 'UTF8'; 
 +Con PG 8.4 ci sono più scelte:  CREATE DATABASE dbname OWNER dbuser LC_COLLATE = 'it_IT.UTF-8' LC_CTYPE = 'it_IT.UTF-8' 
 +                                TEMPLATE template0 ENCODING 'UTF8';
 Assegna privilegi su tabella:   GRANT ALL ON tablename TO "username"; Assegna privilegi su tabella:   GRANT ALL ON tablename TO "username";
 Cambiare password utente DB:    ALTER USER "username" PASSWORD 'secret'; Cambiare password utente DB:    ALTER USER "username" PASSWORD 'secret';
Line 102: Line 104:
 </code> </code>
  
-Per recuperare il contenuto (il database deve essere gia' esistere):+Per recuperare il contenuto (il database deve già esistere):
  
 <code> <code>
Line 109: Line 111:
  
 **NOTA:** In caso di upgrade del database con cambio di **major** o **minor** version (le prime due parti del numero di versione) è necessario **fare il dump e il successivo restore** dei dati. Se invece cambia solo il numero di **revision** (il terzo numero), i dati rimangono compatibili e non è necessario fare dump/restore. **NOTA:** In caso di upgrade del database con cambio di **major** o **minor** version (le prime due parti del numero di versione) è necessario **fare il dump e il successivo restore** dei dati. Se invece cambia solo il numero di **revision** (il terzo numero), i dati rimangono compatibili e non è necessario fare dump/restore.
 +
 +==== Dump degli utenti (ruoli) ====
  
 Dump global objects that are common to all databases (pg_dump does not save these objects). This currently includes information about database users and groups, and access permissions that apply to databases as a whole: Dump global objects that are common to all databases (pg_dump does not save these objects). This currently includes information about database users and groups, and access permissions that apply to databases as a whole:
Line 116: Line 120:
 </code> </code>
  
 +This is an example of dump from an 8.4 cluster into a 9.1 cluster:
 +
 +<code>
 +pg_dumpall --cluster 8.4/main --clean --globals-only > globals-8.4.dump
 +psql --cluster 9.1/main < globals-8.4.dump
 +</code>
 ===== Backup e restore selettivo ===== ===== Backup e restore selettivo =====
  
Line 204: Line 214:
 SHOW search_path; SHOW search_path;
 </code> </code>
 +
 +È possibile impostare una **''search_path''** predefinita per un utente:
 +
 +<code sql>
 +ALTER USER test SET search_path TO "$user",public,foo;
 +</code>
 +
 +L'impostazione dell'utente è visibile nella vista ''pg_user'', nel campo ''useconfig''.
  
 Per dare i privilegi di lettura su uno schema e pieni privilegi su un altro: Per dare i privilegi di lettura su uno schema e pieni privilegi su un altro:
  
 <code sql> <code sql>
-GRANT USAGE ON SCHEMA datirt10k TO corso+GRANT USAGE ON SCHEMA datirt10k TO user
-GRANT SELECT ON datirt10k.ac TO corso;+GRANT SELECT ON datirt10k.ac TO user;
  
-CREATE SCHEMA corso AUTHORIZATION corso+CREATE SCHEMA corso AUTHORIZATION user
-GRANT ALL PRIVILEGES ON SCHEMA corso TO corso;+GRANT ALL PRIVILEGES ON SCHEMA corso TO user;
 </code> </code>
  
 +La parola chiave ''AUTHORIZATION'' fa sì che tutte le ''GRANT'' eseguite nello schema siano eseguite a nome dell'utente specificato.
  
 ====== Lavorare con le sequenze ====== ====== Lavorare con le sequenze ======
Line 222: Line 241:
 <code sql> <code sql>
 SELECT setval('table_column_seq', 1, false); SELECT setval('table_column_seq', 1, false);
 +</code>
 +
 +Anche questo comando imposta il prossimo valore usato da una sequenza:
 +
 +<code sql>
 +ALTER SEQUENCE table_column_seq RESTART WITH 632;
 </code> </code>
  
Line 227: Line 252:
  
 <code sql> <code sql>
-ALTER TABLE table ALTER COLUMN column SET DEFAULT nextval('table_column_seq');+ALTER TABLE tablename ALTER COLUMN columnname SET DEFAULT nextval('tablename_columnname_seq');
 </code> </code>
  
Line 233: Line 258:
  
 <code sql> <code sql>
-SELECT * FROM table_column_seq;+SELECT * FROM tablename_columnname_seq; 
 +</code> 
 + 
 +Per **convertire un campo INT in SERIAL**, prima bisogna scoprire il valore massimo utilizzato nel campo, quindi si crea una sequenza che parte da quel valore + 1: 
 + 
 +<code sql> 
 +SELECT MAX(columnname) FROM tablename; 
 +CREATE SEQUENCE tablename_columnname_seq START WITH <max+1> OWNED BY tablename.columnname; 
 +ALTER TABLE tablename ALTER COLUMN columnname SET DEFAULT nextval('tablename_columnname_seq');
 </code> </code>
  
Line 249: Line 282:
 createlang --list dbname createlang --list dbname
 </code> </code>
 +
 +====== Elenco delle funzioni C ======
 +
 +FIXME
 +Con il comando **''\df''** non si vedono tutte le funzioni, ad esempio non si vedono quelle 
 +in **C** e quelle in **plpgsql** (verificare!). Questo un sistema per vederle:
 +
 +<code sql>
 +SELECT proname 
 +    FROM pg_proc proc JOIN pg_language lang
 +        ON proc.prolang = lang.oid
 +    WHERE lang.lanname = 'plpgsql';
 +</code>
 +
doc/appunti/linux/sa/postgresql.1235083992.txt.gz · Last modified: 2009/06/16 12:55 (external edit)