Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何获取函数返回类型的长度、精度和比例?_Postgresql_Types - Fatal编程技术网

Postgresql 如何获取函数返回类型的长度、精度和比例?

Postgresql 如何获取函数返回类型的长度、精度和比例?,postgresql,types,Postgresql,Types,我可以从如下目录表中获取函数返回类型 SELECT proname, pg_get_function_result(p.oid) FROM pg_proc p JOIN pg_namespace n on n.oid = p.pronamespace WHERE n.nspname = 'someschema' and p.proname = 'somefunction' 我还想得到返回类型的 一段 b精度 c比例(如果数据类型支持) 是否可以从pg_目录中获取它,或者我必须从信息模式列中

我可以从如下目录表中获取函数返回类型

SELECT proname, pg_get_function_result(p.oid)
FROM pg_proc p 
JOIN pg_namespace n on n.oid = p.pronamespace 
WHERE n.nspname = 'someschema' and p.proname = 'somefunction'
我还想得到返回类型的 一段 b精度 c比例(如果数据类型支持)


是否可以从pg_目录中获取它,或者我必须从信息模式列中获取它?

看看这篇文章:

我根据那篇文章做了一个简短的回答:

select
    p.proname, pg_get_function_result(p.oid), 
    p.proargnames,
    array(
        select format_type(a.p::int, null)
        from (select regexp_split_to_table(p.proargtypes::text, ' ') as p) as a
    )
from pg_proc as p 
    inner join pg_namespace as n on n.oid = p.pronamespace 
where n.nspname = 'someschema' and p.proname = 'somefunction'

注意!精度和比例对于PostgreSQL标量函数通常是无用的,因为它被忽略了。只有类型才重要

postgres=# CREATE OR REPLACE FUNCTION foo1() RETURNS numeric(10,3) AS $$ BEGIN RETURN 10.0/3.0; END; $$ LANGUAGE plpgsql; CREATE FUNCTION Time: 39.511 ms postgres=# SELECT foo1(); foo1 ──────────────────── 3.3333333333333333 (1 row) Time: 0.910 ms postgres=# CREATE OR REPLACE FUNCTION foo2() RETURNS varchar(2) AS $$ BEGIN RETURN 'abcde'; END; $$ LANGUAGE plpgsql; CREATE FUNCTION Time: 28.992 ms postgres=# SELECT foo2(); foo2 ─────── abcde (1 row) Time: 0.746 ms 只有使用域,您才能传播或确保必要的强制转换到函数的外部:

postgres=# CREATE DOMAIN xx AS numeric(10,3); CREATE DOMAIN postgres=# CREATE OR REPLACE FUNCTION foo4() RETURNS xx AS $$ BEGIN RETURN 10.0/3.0; END; $$ LANGUAGE plpgsql; CREATE FUNCTION Time: 32.417 ms postgres=# SELECT foo4(); foo4 ─────── 3.333 (1 row) 获取有关已使用的查询到系统目录的信息的技巧

使用参数-E运行psql 使用相关的\d*命令
此查询不返回任何长度/精度/比例信息 bash-4.1$ psql.92 postgres -E psql.92 (9.2.2) Type "help" for help. postgres=# \df ********* QUERY ********** SELECT n.nspname as "Schema", p.proname as "Name", pg_catalog.pg_get_function_result(p.oid) as "Result data type", pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types", CASE WHEN p.proisagg THEN 'agg' WHEN p.proiswindow THEN 'window' WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger' ELSE 'normal' END as "Type" FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE pg_catalog.pg_function_is_visible(p.oid) AND n.nspname 'pg_catalog' AND n.nspname 'information_schema' ORDER BY 1, 2, 4; ************************** List of functions Schema │ Name │ Result data type │ Argument data types │ Type ────────┼────────────────────────────┼─────────────────────────────┼─────────────────────┼──────── public │ f1 │ void │ │ normal public │ foo1 │ numeric │ │ normal public │ foo2 │ character varying │ │ normal public │ foo3 │ numeric │ OUT result numeric │ normal public │ foo4 │ xx │ │ normal public │ to_timestamp_ignore_errors │ timestamp without time zone │ text │ normal public │ xavg │ bigint │ integer │ normal (7 rows)