* [[:start|Accueil]] * [[:public:kb|KB]] ====== PostgreSQL ====== ===== Acces ===== sur le serveur se logger en postgres su postgres lancer psql \h pour les commandes sql \? pour les commandes psql \q pour quitter \l pour lister les DBs ===== Créer une DB ===== On crée une base et un compte propriétaire de cette base. ==== Créer un role ==== createuser -D -R -l -E -e -P -U pgsql mon_user man createuser pour en savoir plus ... ou avant faire un su pgsql voire sudo -u pgsql createuser -D -R -l -E -e -P -U pgsql mon_user De façon a avoir les droits associés au compte root du serveur (ici pgsql) Entrer ensuite le password, puis répondre à cette question Shall the new role be a superuser? (y/n) >CREATE ROLE mon_user ENCRYPTED PASSWORD 'toto' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN; -->CREATE ROLE ==== Créer la base ==== sudo createdb -E latin1 -O mon_user -e -U pgsql ma_db ** ou plutôt ** sudo createdb -E utf8 -O mon_user -e -U pgsql ma_db >CREATE DATABASE ma_db OWNER mon_user ENCODING 'utf8'; -->CREATE DATABASE ===== Supprimer une DB ===== sudo dropdb -U mon_user ma_db ---- ===== Quelques éléments de la syntaxe SQL de PostgreSQL. ===== Soit la table "mots", avec les colonnes "id", "mot", "definition" ---- ==== SELECT ==== [[http://www.postgresql.org/docs/8.1/interactive/functions-matching.html|Doc]] ===Afficher tous les mots et toutes les colonnes :=== SELECT * FROM mots; ou encore SELECT * FROM "mots"; ===Idem en affichant seulement la colonne id :=== SELECT id FROM mots; ou encore SELECT id FROM "nom_du_shema"."mots"; ===L'enregistrement dont l'id est 15 (on affiche toutes les colonnes)=== SELECT * FROM mots WHERE id = 15; ===Les enregistrements dont le mot est "toto"=== SELECT * FROM mots WHERE mot = 'toto';
ou
SELECT * FROM mots WHERE mot LIKE 'toto'; ===Les enregistrements dont le mot contient toto :=== SELECT * FROM mots WHERE mots ~* 'toto' ===Les enregistrements dont le mot commence par toto :=== SELECT * FROM mots WHERE mots ~* '^toto' == Changer la valeur d'une sequence == Pour mettre la valeur actuelle de la sequence ''matable_monid_seq'' à 100 ALTER SEQUENCE matable_monid_seq RESTART WITH 100 Il peut être bien vu de faire regarder avant quelle est la plus grande valeur dans la table qui utilise la sequence. SELECT MAX(monid) FROM matable; == le SHOW COLUMNS sous Postgresql == SELECT a.attname AS field, pg_catalog.format_type(a.atttypid, a.atttypmod) AS type, a.attnotnull AS null, a.atthASdef AS default, adef.adsrc AS value, pg_catalog.col_description(a.attrelid, a.attnum) AS comment FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef ON a.attrelid=adef.adrelid AND a.attnum=adef.adnum WHERE a.attrelid = (SELECT oid FROM pg_catalog.pg_clASs WHERE relname='ma_table' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = 'public')) AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum == Majuscules et minuscules == LOWER(my_field) UPPER (my_field) = Divers = == Migrer l'encodage vers UTF-8 == * Créer une nouvelle database en lui donnant l'encodage UTF8 * Faire un export (dump) sans compression (en plain text) de l'ancienne DB * Dans le fichier de dump, couper / coller toutes les données (en principe encadrées par COPY) dans un nouveau fichier texte data.sql * couper coller ensuite toutes les contraintes (placées à la fin du fichier dump) dans un fichier constraints.sql * Sous Unix, lancer la commande : iconv -f ancien_encodage -t utf-8 data.sql > data_utf8.sql //(sous windows ... bon courage)// * Importer dans la nouvelle DB le shéma (en principe le fichier dump ne contient plus que le shéma) * Importer dans la nouvelle DB les données UTF-8 * Importer dans la nouvelle DB les contraintes * Renommer l'ancienne DB * Renommer la nouvelle DB avec le nom de l'ancienne * Si vous utilisez un site web qui tape dans ces données, n'oubliez pas de préciser dans le head le nouvel encodage :