完整 SQL 语句的别名? (在 PostgreSQL psql 中)
Alias for a complete SQL statement? (in PostgreSQL psql)
在 PostgreSQL 9.5 psql(用于交互式会话)中,我想为完整的 SQL 语句创建一个别名,类似于 shell 别名。 objective 只是让输出打印在屏幕上。
如果我可以从存储过程中启用格式化的服务器输出(在 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' 从存储过程中进行打印,但为此我需要重新实现 table 的漂亮打印。
也许有一种完全不同的机制可以做到这一点?
(my_table
代表收集服务器数据记帐信息的复杂SQL语句,或返回table的my_table()
存储过程)
编辑
@Abelisto 提供的解决方案(使用 psql 变量)可以为任意语句创建别名,而不仅仅是将结果打印到屏幕上。
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
启动时都会自动执行其内容。
在 PostgreSQL 9.5 psql(用于交互式会话)中,我想为完整的 SQL 语句创建一个别名,类似于 shell 别名。 objective 只是让输出打印在屏幕上。
如果我可以从存储过程中启用格式化的服务器输出(在 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' 从存储过程中进行打印,但为此我需要重新实现 table 的漂亮打印。
也许有一种完全不同的机制可以做到这一点?
(my_table
代表收集服务器数据记帐信息的复杂SQL语句,或返回table的my_table()
存储过程)
编辑
@Abelisto 提供的解决方案(使用 psql 变量)可以为任意语句创建别名,而不仅仅是将结果打印到屏幕上。
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
启动时都会自动执行其内容。