PostgreSQL : hints and tips

UPDATE FROM

UPDATE iml 
SET idaffaire=a.id
FROM affaires a
WHERE a.codeaff=iml.codeaff

Changer les droits pour tout un schéma

LA solution cool :

REASSIGN OWNED BY old_role [, ...] TO new_role;

Sinon, à la main :

grant all on all tables in schema public to untel;
grant all on all sequences in schema public to untel;
grant all on all functions in schema public to untel;

Pour voir les propriétaires des fonctions :

SELECT pg_catalog.pg_get_userbyid(p.proowner), format('%I.%I(%s)', n.nspname, p.proname, oidvectortypes(p.proargtypes))
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
AND n.nspname NOT IN ('pg_catalog','information_schema');    

Template databases

Avant de mettre en prod un nouveau serveur, il est très important (pour les performances notamment) de définir un modèle de base de données propre. Si on ne l’a pas fait au départ, procéder ainsi (template1 est la base de données “modèle” utilisée lors d’un CREATE DATABASE) :

On retire la petite sécurité qui protège template1 puis on la supprime et la recrée proprement :

UPDATE pg_database SET datistemplate=FALSE WHERE datname='template1';
DROP DATABASE template1;
CREATE DATABASE template1 ENCODING='UTF8' TEMPLATE=template0 LC_COLLATE='fr_FR.UTF-8' LC_CTYPE='fr_FR.UTF-8';
UPDATE pg_database SET datistemplate=TRUE WHERE datname='template1';

Bonus : migrer les infos LC_COLLATE et LC_CTYPE d’une DB :

On ne peut pas y être connecté :

\c template1

Renommer la base :

ALTER DATABASE mabase RENAME TO mabase_old;

La recréer comme on veut :

CREATE DATABASE mabase OWNER postgres;

On peut vérifier avec :

\l+

Puis export/réimport. Quitter psql.

pg_dump -Fc -fmabase.bkp -d mabase_old
pg_restore -d mabase mabase.bkp

Opérations sur les fonctions

Liste des fonctions :

\df

Pour modifier ou supprimer une fonction, la complétion marche très bien, notamment pour la liste des paramètres :

ALTER FUNCTION arro<tab>ndis<tab>(<tab>double precision) OWN<tab>ER TO untel;
ALTER FUNCTION arrondis(double precision) OWNER TO untel;

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *