当您判断在数据库上定义的 routine 时,DBeaver可能只运行pg_get_function_arguments()
.
它不是recall routine 是如何定义为注释和空格的,而是reconstructs一个与DDL兼容的列表:
pg_get_function_arguments (
101 oid ) → text
重新构造函数或过程的参数列表,其格式必须在CREATE FUNCTION
以内(包括默认值).
你可以自己试一下:
CREATE OR REPLACE PROCEDURE /*inline comment*/ public.full_load (
IN input_table_name VARCHAR, --end-of-line comment
IN target_table_name VARCHAR,
IN load_key_field VARCHAR,
IN load_id_field VARCHAR,
IN last_load_id_field VARCHAR,
IN valid_to_dttm_field VARCHAR,
IN valid_from_dttm_field VARCHAR,
IN paral INT DEFAULT 1
) LaNguAge PlpgSql as --funky capitalization
$$
bEGin SeLeCT 'abc'/*inline*/ ;
eND; --end of line comment
$$;
select pg_get_function_arguments('full_load'::regproc);
pg_get_function_arguments |
IN input_table_name character varying, IN target_table_name character varying, IN load_key_field character varying, IN load_id_field character varying, IN last_load_id_field character varying, IN valid_to_dttm_field character varying, IN valid_from_dttm_field character varying, IN paral integer DEFAULT 1 |
您还可以在psql
meta-command \ef full_load
中看到这一点:正文按原样保存并完整调用,而其余部分仅重建:
CREATE OR REPLACE PROCEDURE public.full_load(IN input_table_name character varying, IN target_table_name character varying, IN load_key_field character varying, IN load_id_field character varying, IN last_load_id_field character varying, IN valid_to_dttm_field character varying, IN valid_from_dttm_field character varying, IN paral integer DEFAULT 1)
LANGUAGE plpgsql
AS $procedure$
bEGin SeLeCT 'abc'/*inline*/ ;
eND; --end of line comment
$procedure$
如果你想保留这样的细节,你应该save your code as .sql
脚本文件somewhere.否则,PostgreSQL只会try 详细地记住 routine 主体,但签名(名称、参数、设置)将从注释和空格等无关紧要的标记中剥离,包括您丢失的换行符和缩进,以及大写.