*** doc/src/sgml/func.sgml --- doc/src/sgml/func.sgml *************** *** 11551,11556 **** SELECT pg_type_is_visible('myschema.widget'::regtype); --- 11551,11560 ---- + pg_typeof + + + pg_get_keywords *************** *** 11617,11622 **** SELECT pg_type_is_visible('myschema.widget'::regtype); --- 11621,11631 ---- get SQL name of a data type + pg_typeof(any) + regtype + get the data type of any value + + pg_get_keywords() setof record get list of SQL keywords and their categories *************** *** 11727,11732 **** SELECT pg_type_is_visible('myschema.widget'::regtype); --- 11736,11747 ---- + pg_typeof returns the SQL name of the data type of any + value which is passed to it as an argument. This can be helpful for + troubleshooting or dynamically constructing SQL queries. + + + pg_get_keywords returns a set of records describing the SQL keywords recognized by the server. The word column contains the keyword. The catcode column contains a *** src/backend/utils/adt/misc.c --- src/backend/utils/adt/misc.c *************** *** 59,64 **** nonnullvalue(PG_FUNCTION_ARGS) --- 59,73 ---- } /* + * Return the type of the argument. + */ + Datum + pg_typeof(PG_FUNCTION_ARGS) + { + PG_RETURN_OID(get_fn_expr_argtype(fcinfo->flinfo, 0)); + } + + /* * current_database() * Expose the current database to the user */ *** src/include/catalog/catversion.h --- src/include/catalog/catversion.h *************** *** 53,58 **** */ /* yyyymmddN */ ! #define CATALOG_VERSION_NO 200808311 #endif --- 53,58 ---- */ /* yyyymmddN */ ! #define CATALOG_VERSION_NO 200809031 #endif *** src/include/catalog/pg_proc.h --- src/include/catalog/pg_proc.h *************** *** 1121,1126 **** DESCR("does not match LIKE expression"); --- 1121,1128 ---- DATA(insert OID = 860 ( bpchar PGNSP PGUID 12 1 0 0 f f t f i 1 1042 "18" _null_ _null_ _null_ char_bpchar _null_ _null_ _null_ )); DESCR("convert char to char()"); + DATA(insert OID = 826 ( pg_typeof PGNSP PGUID 12 1 0 0 f f f f i 1 2206 "2276" _null_ _null_ _null_ pg_typeof _null_ _null_ _null_ )); + DESCR("returns the type of the argument"); DATA(insert OID = 861 ( current_database PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ current_database _null_ _null_ _null_ )); DESCR("returns the current database"); DATA(insert OID = 817 ( current_query PGNSP PGUID 12 1 0 0 f f f f v 0 25 "" _null_ _null_ _null_ current_query _null_ _null_ _null_ )); *** src/include/utils/builtins.h --- src/include/utils/builtins.h *************** *** 403,408 **** extern Datum pg_ls_dir(PG_FUNCTION_ARGS); --- 403,409 ---- /* misc.c */ extern Datum nullvalue(PG_FUNCTION_ARGS); extern Datum nonnullvalue(PG_FUNCTION_ARGS); + extern Datum pg_typeof(PG_FUNCTION_ARGS); extern Datum current_database(PG_FUNCTION_ARGS); extern Datum current_query(PG_FUNCTION_ARGS); extern Datum pg_cancel_backend(PG_FUNCTION_ARGS);