注意力!对于 PostgreSQL 标量函数,精度和比例通常是无用的,因为它被忽略了。只有类型很重要。
postgres=# 创建或替换函数 foo1()
返回数字(10,3)为 $$
开始
返回 10.0/3.0;
结尾;
$$ 语言 plpgsql;
创建函数
时间:39.511 毫秒
postgres=# 选择 foo1();
foo1
────────────────────
3.3333333333333333
(1 行)
时间:0.910 毫秒
postgres=# 创建或替换函数 foo2()
返回 varchar(2) 作为 $$
开始
返回'abcde';
结尾;
$$ 语言 plpgsql;
创建函数
时间:28.992 毫秒
postgres=#选择 foo2();
foo2
────────
abcde
(1 行)
时间:0.746 毫秒
只有使用域,您才能将(或确保必要的强制转换)传播到函数的外部:
postgres=#CREATE DOMAIN xx AS numeric(10,3);
创建域
postgres=# 创建或替换函数 foo4()
返回 xx 作为 $$
开始
返回 10.0/3.0;
结尾;
$$ 语言 plpgsql;
创建函数
时间:32.417 毫秒
postgres=# 选择 foo4();
foo4
────────
3.333
(1 行)
获取有关系统目录已用查询的信息的技巧。
- 使用参数 -E 运行 psql
- 使用相关的 \d* 命令
bash-4.1$ psql.92 postgres -E
psql.92 (9.2.2)
键入“帮助”以获得帮助。
postgres=#\df
********* 询问 **********
选择 n.nspname 作为“架构”,
p.proname 作为“名称”,
pg_catalog.pg_get_function_result(p.oid) 作为“结果数据类型”,
pg_catalog.pg_get_function_arguments(p.oid) 作为“参数数据类型”,
案子
当 p.proisagg THEN 'agg'
当 p.proiswindow THEN '窗口'
当 p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
否则“正常”
END 作为“类型”
FROM pg_catalog.pg_proc p
左连接 pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
和 n.nspname 'pg_catalog'
AND n.nspname 'information_schema'
按 1、2、4 排序;
******************************
功能列表
架构│名称│结果数据类型│参数数据类型│类型
────────┼────────────────────────────┼──────────── ──────────────────┼──────────────────────┼────────
公共 │ f1 │ 无效 │ │ 正常
公共 │ foo1 │ 数字 │ │ 普通
公共 │ foo2 │ 字符变化 │ │ 普通
public │ foo3 │ numeric │ OUT 结果 numeric │ normal
公共 │ foo4 │ xx │ │ 普通
public │ to_timestamp_ignore_errors │ 没有时区的时间戳 │ text │ normal
public │ xavg │ bigint │ integer │ normal
(7 行)