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;