我试图通过换行符来编写属性,以使过程易于阅读和编辑,但是,在保存过程后,dbeaver会自动编辑它,将过程中的属性列表转换为字符串.

这是我自己编写的程序标题:

CREATE OR REPLACE PROCEDURE public.full_load(
    IN input_table_name VARCHAR, 
    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
)

这是DBeaver在保存后自动编辑我的程序的方式:

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)

这会使我的代码更难阅读和编辑.

Dbeaver设置中是否有负责禁用程序标题自动编辑的参数?

推荐答案

当您判断在数据库上定义的 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 主体,但签名(名称、参数、设置)将从注释和空格等无关紧要的标记中剥离,包括您丢失的换行符和缩进,以及大写.

Sql相关问答推荐

获取家谱树中第一次出现的特定信息,然后停止

用于匹配红旗和绿旗的SQL查询

在SQL中将相同且紧挨着的元素进行分组

在甲骨文中查找前一个星期一的S日期

如何在SQL中按每个子组的顺序更新数据?

从原始表列中经过JSON字符串化的对象数组构建视图

如何更新SQLite数据库中的表?

每年独特口味的冰淇淋数量

删除所有订单中可用的重复值

如何使用SQL生成数据的滚动3天总和

查询以从时间范围列表中查找唯一时间段

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

编写查询以根据级别 (p2) 返回父位置

Select 字段,除非另一个字段包含重复项

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

将 MERGE 语句与 Oracle PL/SQL 表类型一起使用时,导致无效数据类型错误的原因是什么?

使用标准SQL 触发更新当前日期

在 UTF 编码字符上应用 SQL LIKE 语句没有给出任何结果