一个完整的SQL语句的别名? (在PostgreSQL psql中)

时间:2016-07-22 22:29:37

标签: postgresql psql

在PostgreSQL 9.5 psql中(用于交互式会话),我想创建一个完整SQL语句的别名,类似于shell别名。目标是只在屏幕上打印输出。

如果我可以在存储过程中启用格式化服务器输出(以Oracle术语表示),它将如下所示:

CREATE or replace FUNCTION print_my_table()
RETURNS void
AS $$
    -- somehow enable output here
    SELECT * from my_table;
$$ LANGUAGE SQL;

这将被调用为print_my_table();(而不是SELECT x FROM ...

我知道我可以使用' RAISE NOTICE'从存储过程中打印,但要做到这一点,我需要重新实现漂亮的表打印。

也许有一种完全不同的机制可以做到这一点?

my_table代表收集服务器数据记帐信息的复杂SQL语句,或返回表的my_table()存储过程

修改

@Abelisto提供的解决方案(使用psql变量)可以为任意语句创建别名,而不仅仅是将结果打印到屏幕上。

1 个答案:

答案 0 :(得分:2)

psql实用程序中有所谓的内部变量,它将被其内容替换(除了字符串常量之外):

postgres=# \set foo 'select 1;'
postgres=# :foo
 ?column? 
----------
        1
(1 row)

也可以通过命令行选项-v设置:

psql -v foo='select 1;' -v bar='select 2;'

创建文本文件,如

\set foo 'select 1;'
\set bar 'select 2;'
\set stringinside 'select $$abc$$;'

并使用\i命令加载它。

最后,您可以创建文件~/.psqlrc(其目的就像~/.bashrc文件),每次psql启动时,其内容都会自动执行。