J'ai besoin d'un moyen d'obtenir une "description" des colonnes d'une requête SELECT (curseur), telles que leurs noms, types de données, précision, échelle, etc., dans PostgreSQL (ou mieux encore PL/pgSQL).Comment décrire les colonnes (obtenir leurs noms, types de données, etc.) d'une requête SQL dans PostgreSQL
Je passe de Oracle PL/SQL, où je peux obtenir une telle description en utilisant une procédure intégrée dbms_sql.describe_columns. Il renvoie un tableau d'enregistrements, un pour chaque colonne d'un curseur donné (analysé).
EDB l'a mis en œuvre aussi (https://www.enterprisedb.com/docs/en/9.0/oracompat/Postgres_Plus_Advanced_Server_Oracle_Compatibility_Guide-127.htm#P13324_681237)
Un exemple d'une telle requête:
select col1 from tab where col2 = :a
J'ai besoin d'une API (ou une solution de contournement) qui pourrait être appelé comme ça (je l'espère):
select query_column_description('select col1 from tab where col2 = :a');
qui renverra quelque chose de similaire à:
{{"col1","numeric"}}
Pourquoi? Nous construisons des vues où ces requêtes deviennent des colonnes individuelles. Par exemple, la requête de vue ressemblerait à ce qui suit:
select (select col1 from tab where col2 = t.colA) as col1::numeric
from tab_main t
Quelque chose de similaire est disponible en utilisant psycopg2 (https://stackoverflow.com/questions/10252247/how-do-i-get-a-list-of-column-names-from-a-psycopg2-cursor), mais je espérais que je pourrais rester dans PL/pgSQL, donc je n'ai pas à faire avec (install/learn/etc.) psycopg2 juste pour ça (et peut-être d'autres fonctionnalités cool/nécessaires que je n'ai pas encore découvert) –
rien de intégré du côté serveur. Du côté des clients, je sais que JDBC peut le faire, et je suppose aussi ODBC. Je suppose que les deux interfaces utilisent [SPI] (https://www.postgresql.org/docs/current/static/spi-interface-support.html) pour cela. –
S'il vous plaît vote upvote la réponse si cela vous convient. Merci. – Indent