Voir http://docs.postgresqlfr.org/9.3/sql-commands.html
ALTER AGGREGATE nom ( type_arg [ , ... ] ) RENAME TO nouveau_nom ALTER AGGREGATE nom ( type_arg [ , ... ] ) OWNER TO nouveau_proprietaire ALTER AGGREGATE nom ( type_arg [ , ... ] ) SET SCHEMA nouveau_schema
ALTER USER nom [ [ WITH ] option [ ... ] ]
SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT limite_connexion | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'motdepasse' | VALID UNTIL 'dateheure'
ALTER USER nom RENAME TO nouveau_nom ALTER USER nom SET parametre_configuration { TO | = } { valeur | DEFAULT } ALTER USER nom SET parametre_configuration FROM CURRENT ALTER USER nom RESET parametre_configuration ALTER USER nom RESET ALL
CREATE DATABASE nom [ [ WITH ] [ OWNER [=] nom_utilisateur ] [ TEMPLATE [=] modèle ] [ ENCODING [=] codage ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] limite_connexion ] ]
La commande CREATE DATABASE ne peut pas être exécutée à l'intérieur d'un bloc de transactions.
Les erreurs sur la ligne « ne peut initialiser le répertoire de la base de données » (« could not initialize database directory » dans la version originale) sont le plus souvent dues à des droits insuffisants sur le répertoire de données, à un disque plein ou à un autre problème relatif au système de fichiers.
L'instruction DROP DATABASE(7) est utilisée pour supprimer la base de données.
Le programme createdb(1) est un enrobage de cette commande fourni par commodité.
Bien qu'il soit possible de copier une base de données autre que template1 en spécifiant son nom comme modèle, cela n'est pas (encore) prévu comme une fonctionnalité « COPY DATABASE » d'usage général. La limitation principale est qu'aucune autre session ne peut être connectée à la base modèle pendant sa copie. CREATE DATABASE échouera s'il y a une autre connexion au moment de son exécution ; sinon, les nouveaux connexions à la base modèle seront verrouillées jusqu'à la fin de la commande CREATE DATABASE. La Section 21.3, « Bases de données modèles » fournit plus d'informations à ce sujet.
L'encodage du jeu de caractère spécifié pour la nouvelle base de données doit être compatible avec les paramètre de locale (LC_COLLATE et LC_CTYPE). Si la locale est C (ou de la même façon POSIX), alors tous les encodages sont autorisés. Pour d'autres paramètres de locale, il n'y a qu'un encodage qui fonctionnera correctement. (Néanmoins, sur Windows, l'encodage UTF-8 peut être utilisée avec toute locale.) CREATE DATABASE autorisera les superutilisateurs à spécifier l'encodage SQL_ASCII quelque soit le paramètre locale mais ce choix devient obsolète et peut occasionner un mauvais comportement des fonctions sur les chaînes si des données dont l'encodage n'est pas compatible avec la locale sont stockées dans la base.
Les paramètres d'encodage et de locale doivent correspondre à ceux de la base modèle, excepté quand la base template0 est utilisée comme modèle. La raison en est que d'autres bases de données pourraient contenir des données qui ne correspondent pas à l'encodage indiqué, ou pourraient contenir des index dont l'ordre de tri est affecté par LC_COLLATE et LC_CTYPE. Copier ces données peut résulter en une base de données qui est corrompue suivant les nouveaux paramètres. template0, par contre, ne contient aucun index pouvant être affecté par ces paramètres.
L'option CONNECTION LIMIT n'est qu'approximativement contraignante ; si deux nouvelles sessions commencent sensiblement en même temps alors qu'un seul « connecteur » à la base est disponible, il est possible que les deux échouent. De plus, les superutilisateurs ne sont pas soumis à cette limite.
CREATE DATABASE lusiadas;
CREATE DATABASE ventes OWNER app_ventes TABLESPACE espace_ventes;
CREATE DATABASE musique ENCODING 'LATIN1' TEMPLATE template0;
Dans cet exemple, la clause TEMPLATE template0 n'est requise que si l'encodage de template1 n'est pas ISO-8859-1. Notez que modifier l'encodage pourrait aussi nécessiter de sélectionner de nouveaux paramètres pour LC_COLLATE et LC_CTYPE.connexion ] ]
CREATE ROLE nom [ [ WITH ] option [ ... ] ] où option peut être : SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT limite_connexion | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'motdepasse' | VALID UNTIL 'heuredate' | IN ROLE nom_role [, ...] | IN GROUP nom_role [, ...] | ROLE nom_role [, ...] | ADMIN nom_role [, ...] | USER nom_role [, ...] | SYSID uid
L'attribut INHERIT est la valeur par défaut pour des raisons de compatibilité descendante : dans les précédentes versions de PostgreSQL™, les utilisateurs avaient toujours accès à tous les droits des groupes dont ils étaient membres. Toutefois, NOINHERIT est plus respectueux de la sémantique spécifiée dans le standard SQL.
Le privilège CREATEROLE impose quelques précautions. Il n'y a pas de concept d'héritage des droits pour un tel rôle. Cela signifie qu'un rôle qui ne possède pas un droit spécifique, mais est autorisé à créer d'autres rôles, peut aisément créer un rôle possédant des droits différents des siens (sauf en ce qui concerne la création des rôles superutilisateur). Par exemple, si le rôle « user » a le droit CREATEROLE mais pas le droit CREATEDB, il peut toujours créer un rôle possédant le droit CREATEDB. Il est de ce fait important de considérer les rôles possédant le privilège CREATEROLE comme des superutilisateurs en puissance.
PostgreSQL™ inclut un programme, createuser(1) qui possède les mêmes fonctionnalités que CREATE ROLE (en fait, il appelle cette commande) et peut être lancé à partir du shell.
L'option CONNECTION LIMIT n'est vérifiée qu'approximativement. Si deux nouvelles sessions sont lancées à peu près simultanément alors qu'il ne reste qu'un seul « emplacement » de connexion disponible pour le rôle, il est possible que les deux échouent. De plus, la limite n'est jamais vérifiée pour les superutilisateurs.
Faites attention lorsque vous donnez un mot de passe non chiffré avec cette commande. Le mot de passe sera transmis en clair au serveur. Ce dernier pourrait être tracer dans l'historique des commandes du client ou dans les traces du serveur. Néanmoins, la commande createuser(1) transmet le mot de passe chiffré. De plus, psql(1) contient une commande \password que vous pouvez utiliser pour modifier en toute sécurité votre mot de passe.
CREATE ROLE jonathan LOGIN;
CREATE USER davide WITH PASSWORD 'jw8s0F4';
(CREATE USER est identique à CREATE ROLE mais implique LOGIN.)
CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2007-01-01';
CREATE ROLE admin WITH CREATEDB CREATEROLE;
DROP DATABASE [ IF EXISTS ] nom
DROP DATABASE ne peut pas être exécutée à l'intérieur d'un bloc de transactions.
Cette commande ne peut pas être exécutée en cas de connexion à la base de données cible. Il peut paraître plus facile d'utiliser le programme dropdb(1) à la place, qui est un enrobage de cette commande.
DROP ROLE [ IF EXISTS ] nom [, ...]
PostgreSQL™ inclut un programme dropuser(1) qui a la même fonctionnalité que cette commande (en fait, il appelle cette commande) mais qui est lancé à partir du shell.
DROP ROLE jonathan;
ROLLBACK [ WORK | TRANSACTION ]
WORK, TRANSACTION
mots clés optionnels. Ils sont sans effet.
ROLLBACK;