web-dev-qa-db-fra.com

Trouver le propriétaire actuel du type de données personnalisé?

À PostgreSQL, quand j'essaie de courir ALTER TYPE x ADD VALUE y; Sur un type de données personnalisé, je reçois une erreur indiquant PG::Error: ERROR: must be owner of type x.

Je sais que cela peut être résolu en fonctionnant ALTER TYPE x OWNER TO <database owner> Mais ce que je suis curieux de savoir comment je peux vérifier le propriétaire actuel de ce type de données spécifique. \dT+ x ne me donne pas d'informations sur le propriétaire actuel.

Comment puis-je extraire plus d'informations sur les types de données personnalisés, y compris le propriétaire actuel?

3
Erathiel

Jusqu'à 9.4

Vous pouvez aller demander aux catalogues système ( pg_type , être précis):

SELECT rolname 
  FROM pg_type t 
  JOIN pg_authid r ON typowner = r.oid 
 WHERE typname = 'bla';

 usename 
─────────
 dezso

De PostgreSQL 9.5 sur

De cette version sur, il y a un nouveau type d'identifiant d'objet appelé regrole, et il rend la requête un peu plus simple:

SELECT typowner::regrole 
  FROM pg_type t 
 WHERE typname = 'bla';

Mais il y en a plus - la nouvelle version 9.5 de psql affiche déjà le propriétaire lors de l'utilisation \dT+:

      Schema       | Name | Internal name | Size | Elements |  Owner   | ...
-------------------+------+---------------+------+----------+----------+ ...
 zel_api_r14_00_09 | bla  | bla           | 4    | a        | postgres | ...
5
dezso