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

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:linux:sa:postgresql [2009/11/24 19:17] niccolodoc:appunti:linux:sa:postgresql [2012/11/09 09:54] – [Dump degli utenti (ruoli)] 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 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> </code>
  
-=== Convertire un campo INT in SERIAL ===+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> <code sql>
-SELECT MAX(column) FROM table+SELECT MAX(columnname) FROM tablename
-CREATE SEQUENCE table_column_seq START WITH <max+1> OWNED BY table.column+CREATE SEQUENCE tablename_columnname_seq START WITH <max+1> OWNED BY tablename.columnname
-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>
  
doc/appunti/linux/sa/postgresql.txt · Last modified: 2017/11/14 17:40 by niccolo