Modifier le propriétaire ou les droits sur les schémas d’une base avec PgAdmin

Pour modifier le propriétaire de tous les objets d’une base en deux étapes, on utilisera les requêtes suivantes qui vont générer automatiquement, pour chaque objet, les requêtes SELECT nécessaires qu’il suffira ensuite d’exécuter à la chaîne dans une nouvelle fenêtre SQL (après avoir supprimé les doubles quotes).

1. Modifier le propriétaire d’un objet

1.1 Tables

SELECT ‘ALTER TABLE ‘|| schemaname || ‘.’ || tablename ||’ OWNER TO my_new_owner;’
FROM pg_tables WHERE NOT schemaname IN (‘pg_catalog’, ‘information_schema’)
ORDER BY schemaname, tablename;

1.2 Séquences

SELECT ‘ALTER SEQUENCE ‘|| sequence_schema || ‘.’ || sequence_name ||’ OWNER TO my_new_owner;’
FROM information_schema.sequences WHERE NOT sequence_schema IN (‘pg_catalog’, ‘information_schema’)
ORDER BY sequence_schema, sequence_name;

1.3 Vues

SELECT ‘ALTER VIEW ‘|| table_schema || ‘.’ || table_name ||’ OWNER TO my_new_owner;’
FROM information_schema.views WHERE NOT table_schema IN (‘pg_catalog’, ‘information_schema’)
ORDER BY table_schema, table_name;

1.4 Vues matérialisées

SELECT ‘ALTER TABLE ‘|| oid::regclass::text ||’ OWNER TO my_new_owner;’
FROM pg_class WHERE relkind = ‘m’
ORDER BY oid;

2. Attribuer ou révoquer des droits

2.1 Sur des tables

2.1.1 GRANT

SELECT ‘GRANT SELECT ON ‘|| table_schema || ‘.’ || table_name ||’ TO group_role;’
FROM information_schema.tables WHERE NOT table_schema IN (‘pg_catalog’, ‘information_schema’)
ORDER BY table_schema, table_name;

2.1.2 REVOKE

SELECT ‘REVOKE SELECT ON ‘|| table_schema || ‘.’ || table_name ||’ FROM group_role;’
FROM information_schema.tables WHERE NOT table_schema IN (‘pg_catalog’, ‘information_schema’)
ORDER BY table_schema, table_name;

2.2 Sur des schémas

2.2.1 GRANT

SELECT ‘GRANT USAGE ON SCHEMA ‘|| schema_name ||’ TO group_role;’
FROM information_schema.schemata
ORDER BY schema_name;

2.2.2 REVOKE

SELECT ‘REVOKE ALL ON SCHEMA ‘|| schema_name ||’ FROM dreal;’
FROM information_schema.schemata
ORDER BY schema_name;

Sources :

Publicités

Supprimer une base de données avec une session en cours dans pgAdmin

Dans certains cas, la suppression d’une base de données via l’interface graphique de pgAdmin est impossible avec l’affichage d’un message d’erreur indiquant qu’une session est en cours alors que cela n’est manifestement pas le cas.

Il faut donc au préalable exécuter la requête suivante dans la fenêtre SQL :

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = ‘database_name’;

Avant de pouvoir supprimer la base de données avec la commande suivante :

DROP DATABASE database_name;

Sources :