【问题标题】:Variables inside PSQL script without creating a FunctionPSQL 脚本中的变量而不创建函数
【发布时间】:2012-08-08 04:17:35
【问题描述】:

我试图让 PSQL 脚本在下面的示例中使用变量运行,而无需声明函数并且必须调用它们。

DECLARE
    result TEXT;
BEGIN
    SELECT INTO result name 
FROM test;

    RAISE NOTICE result;
END;

其中表 test 只有 1 行和 1 列。这是否可能无需将此脚本包装在函数中。这将使我可以更轻松地通过命令行调用脚本。

谢谢大家。

【问题讨论】:

    标签: postgresql variables psql


    【解决方案1】:

    您可以使用DO 创建并执行匿名函数:

    DO 执行一个匿名代码块,或者换句话说,一个过程语言中的临时匿名函数。

    类似这样的:

    do $$
        declare result text;
        begin
            select name into result from test;
            raise notice '%', result;
        end;
    $$;
    

    我还修复了你的raise notice

    如果您只想以最小格式(即易于解析)将表中的单个值转储到标准输出,那么--tuples-only 可能会有所帮助:

    -t
    --tuples-only
    关闭列名和结果行计数页脚等的打印。这相当于\t命令。

    所以你可以在 shell 中这样说:

    result=$(echo 'select name from test;' | psql -t ...)
    

    【讨论】:

    • 我得到以下信息:ERROR: syntax error at or near "do" LINE 1: do $$... 我们使用的是 PostreSQL v8.3。该版本是否有等效版本?
    • @mlevit:DO 是第 9 版的补充。我不知道 8.3 中有类似的东西,我怀疑除了命名函数之外还有其他选择。你到底想做什么?你能提供更多的上下文吗?
    • 我们所做的基本上是尝试创建动态脚本来执行一些数据操作(通过命令行执行)。我们不想使用函数的原因是因为它们必须每次都在数据库中创建才能运行。
    • @mlevit:在我的更新中,您也许可以使用psql -t 逃脱。
    • 版本 8.3 将在 2013 年 2 月发布 5 年,届时将终止生命周期。如果您需要更新版本的功能,您可能不想等待升级。 (升级可能比解决缺少这一新功能更容易。)我建议跳过 8.4 和 9.0 并转到 9.1,或者甚至在下个月发布时跳到 9.2。
    猜你喜欢
    • 2017-11-09
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多