Comment puis-je obtenir la clé primaire(s) d'une table de Postgres via plpgsql?
Donné un nom de table, comment puis-je extraire une liste de colonnes de clé primaire et de leurs types de données à partir d'une fonction plpgsql?
Vous devez vous connecter pour publier un commentaire.
La requête ci-dessus est très mauvais car il est vraiment lent.
Je recommande cette version officielle:
http://wiki.postgresql.org/wiki/Retrieve_primary_key_columns
si le schéma est nécessaire de la requête comme suit
De fournir une droite bits de SQL, vous pouvez lister les colonnes de clé primaire et de leurs types avec:
'mytable'
avec le bon nom de la table. Ai-je besoin d'être dans un contexte spécifique ou de la portée pour que cela fonctionne?Suivantes
SQL
instruction fonctionne pour moi:Il est pris directement à partir de ici.
Prendre un coup d'oeil à
pg_constraint
système de de table. Ouinformation_schema.table_constraints
vue si vous préférez rester à proximité de la norme SQL.Pour un exemple complet se connecter à une base de données à l'aide de
psql
avec l'option "-E" et le type\d <some_table>
- vous allez voir les requêtes utilisées dans la description d'un tableau.Méfiez-vous des indices lorsque l'ordre de la colonne diffère du tableau de l'ordre des colonnes. (c'est à dire si la clé primaire utilisée colonnes 3, 2 et 1)
La requête suivante est beaucoup plus complexe, mais retourne les colonnes dans l'ordre approprié. (Supprimer le " indisprimary clause d'obtenir les mêmes informations pour tous les index d'une table)
La préservation de l'ordre des colonnes à l'aide de
generate_subscripts
:Vous avez vraiment besoin de 2 tables système pour que:
Remarque: les tables système peut changer entre les versions de PostgreSQL, mais il n'arrive pas souvent (en fait très rarement, voire pas du tout). Et contrairement à l'utilisation de la information_schema.table_constraints, vous n'avez pas besoin d'autorisations spéciales, il suffit de sélectionner sur la table. (Cela a été testé dans Postgres 10.6)
vous donnera la clé primaire d'infos avec d'autres renseignements connexes, tels que toutes les colonnes, leurs types, les index, contraintes, des règles, des déclencheurs etc.
Vous n'avez probablement pas besoin de toutes ces informations, mais il est le moyen le plus rapide pour obtenir tous les détails d'un coup d'oeil, voir plus de détails ici.
Il renvoie à quelque chose comme ceci: