postgresql - 完整 SQL 语句的别名? (在 PostgreSQL psql 中)

标签 postgresql psql

在 PostgreSQL 9.5 psql(用于交互式 session )中,我想为完整的 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”从存储过程中进行打印,但为此我需要重新实现表格的 pretty-print 。

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

(my_table代表收集服务器数据记账信息的复杂SQL语句,或者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 - 完整 SQL 语句的别名? (在 PostgreSQL psql 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536128/

相关文章:

java - 错误: operator does not exist: character varying = bytea

python - Heroku Django 应用程序错误 : Worker Timout Issue (H12)

postgresql - 将参数传递给 psql 过程脚本

postgresql - 添加标签列作为特定值的组聚合结果

postgresql - Heroku Postgres 数据库 HEROKU_POSTGRESQL_AMBER 和 HEROKU_POSTGRESQL_GOLD 之间有什么区别?

sql - 如何将一列添加到表中所有行的另一列?

sql - 如何检查集合中是否有每个 id 的行?

sql - 从 sql 文件恢复单个表转储

python - 如何将np数组存储到psql数据库和django中

ruby-on-rails - RoR : PSQL to ruby - .加入