feature request: \qf datatype - Mailing list pgsql-hackers
From | Alex J. Avriette |
---|---|
Subject | feature request: \qf datatype |
Date | |
Msg-id | 20031225175933.GE21189@posixnap.net Whole thread Raw |
List | pgsql-hackers |
I'd like to request the following feature: Frequently when answering questions on IRC for people, questions fall into one of two categories, "what function can I use to manipulate datatype xyz," and "what datatype can i use for xyz." The latter is harder to answer than the former. For the former, I propose a macro in psql, "\qf" (query function). Obviously, the name implies a broader scope than simply querying the datatypes permissable. I foresee something like this (sorry, this has a lot of output): dbms=> \qf timestamp Name | Result data type | Argument data types ---------------------+-----------------------------+--------------------------------------------------------------------------------------------------------------------abstime | abstime | timestamp with time zoneabstime | abstime | timestampwithout time zoneisfinite | boolean | timestamp with time zoneisfinite | boolean | timestamp without time zoneoverlaps | boolean | timestampwith time zone, interval, timestamp with time zone, intervaloverlaps | boolean |timestamp with time zone, interval, timestamp with time zone, timestamp with time zoneoverlaps | boolean | timestamp with time zone, timestamp with time zone, timestamp with time zone, intervaloverlaps | boolean | timestamp with time zone, timestamp with time zone, timestamp with time zone, timestampwith time zoneoverlaps | boolean | timestamp without time zone, interval, timestampwithout time zone, intervaloverlaps | boolean | timestamp without time zone, interval,timestamp without time zone, timestamp without time zoneoverlaps | boolean | timestampwithout time zone, timestamp without time zone, timestamp without time zone, intervaloverlaps | boolean | timestamp without time zone, timestamp without time zone, timestamp without time zone, timestampwithout time zonetimestamp_eq | boolean | timestamp without time zone, timestamp withouttime zonetimestamp_ge | boolean | timestamp without time zone, timestamp without time zonetimestamp_gt | boolean | timestamp without time zone, timestamp without time zonetimestamp_le | boolean | timestamp without time zone, timestamp without time zonetimestamp_lt | boolean | timestamp without time zone, timestamp without time zonetimestamp_ne | boolean | timestamp without time zone, timestamp without time zonetimestamptz_eq | boolean | timestamp with time zone, timestamp with time zonetimestamptz_ge | boolean | timestamp with time zone, timestamp with time zonetimestamptz_gt | boolean | timestamp with time zone, timestamp with time zonetimestamptz_le | boolean | timestampwith time zone, timestamp with time zonetimestamptz_lt | boolean | timestamp with timezone, timestamp with time zonetimestamptz_ne | boolean | timestamp with time zone, timestampwith time zonedate | date | timestamp with time zonedate |date | timestamp without time zonedate_part | double precision | text, timestampwith time zonedate_part | double precision | text, timestamp without time zonetimestamp_cmp | integer | timestamp without time zone, timestamp without time zonetimestamptz_cmp | integer | timestamp with time zone, timestamp with time zoneage | interval | timestamp with time zoneage | interval | timestampwith time zone, timestamp with time zoneage | interval | timestamp without timezoneage | interval | timestamp without time zone, timestamp without time zonetimestamp_mi | interval | timestamp without time zone, timestamp without time zonetimestamptz_mi | interval | timestamp with time zone, timestamp with time zonetimezone | interval | interval, timestamp with time zonetext | text |timestamp with time zonetext | text | timestamp without time zoneto_char | text | timestamp with time zone, textto_char | text | timestampwithout time zone, texttimetz | time with time zone | timestamp with time zonetime | time without time zone | timestamp with time zonetime | time without time zone | timestampwithout time zonedate_trunc | timestamp with time zone | text, timestamp with time zonetimestamptz | timestamp with time zone | timestamp with time zone, integertimestamptz | timestamp with time zone | timestamp without time zonetimestamptz_larger | timestamp with time zone | timestamp with time zone, timestamp withtime zonetimestamptz_mi_span | timestamp with time zone | timestamp with time zone, intervaltimestamptz_pl_span |timestamp with time zone | timestamp with time zone, intervaltimestamptz_smaller | timestamp with time zone | timestampwith time zone, timestamp with time zonetimezone | timestamp with time zone | interval, timestampwithout time zonetimezone | timestamp with time zone | text, timestamp without time zonedate_trunc | timestamp without time zone | text, timestamp without time zonetimestamp | timestamp withouttime zone | timestamp with time zonetimestamp | timestamp without time zone | timestamp without time zone,integertimestamp_larger | timestamp without time zone | timestamp without time zone, timestamp without time zonetimestamp_mi_span | timestamp without time zone | timestamp without time zone, intervaltimestamp_pl_span | timestampwithout time zone | timestamp without time zone, intervaltimestamp_smaller | timestamp without time zone | timestampwithout time zone, timestamp without time zonetimezone | timestamp without time zone | text, timestampwith time zone (61 rows) The sql required to generate that is as follows: SELECT CASE WHEN p.proretset THEN 'setof ' ELSE '' END || p.proname as "Name", pg_catalog.format_type(p.prorettype, NULL)as "Result data type", pg_catalog.oidvectortypes(p.proargtypes) as "Argument data types" FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE p.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype AND p.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype AND NOT p.proisagg AND pg_catalog.pg_function_is_visible(p.oid) AND pg_catalog.oidvectortypes(p.proargtypes)~ 'timestamp' ORDER BY 2, 1, 3; I looked in src/bin/psql/describe.c, and even found the \df macro. However, the C stuff was beyond my ability. Hopefully, this is a direct "clone \df" item. I really think this would be useful for people who haven't yet becomes familiar with postgres' (very rich) function base. Hm. On second thought, \qf is a bad name for it, as \q is quit, and 'f' is an unexpected "extra argument." Perhaps \dfq? Thanks, alex -- alex@posixnap.net Alex J. Avriette, Professional Something-or-Other "Premature optimization is the root of all evil! BAD PROGRAMMER! No COOKIE!!!" - Mark-Jason Dominus
pgsql-hackers by date: