如何使用plpgsql
语言方言在postgresql(版本9.4)脚本中使用本地脚本变量?我尝试从脚本中获取状态消息的结果,但是会遇到变量范围的问题。
这里有一些示例代码:
-- ------------------------------------------------------
-- Local variables conming in 3 incarnations
-- ident, variable (single quotes, prefix VAR),
-- quoted variable (quoted quotes, prefix QTL)
-- ------------------------------------------------------
-- Work schema
-- ------------------------------------------------------
\set DB_SCHEMA GT1
\set DB_VAR_SCHEMA 'GT1'
\set DB_QTL_SCHEMA '\'':DB_VAR_SCHEMA'\''
-- ------------------------------------------------------
-- Selector for the choosen raster
-- ------------------------------------------------------
\set RS_VAR_PROJECT 'GT1'
\set RS_QTL_PROJECT '\'':RS_VAR_PROJECT'\''
\set RS_VAR_VERSION '2016-2.0KM-V1.0'
\set RS_QTL_VERSION '\'':RS_VAR_VERSION'\''
...
-- =================================================================
-- Information about Settings
-- =================================================================
DO LANGUAGE plpgsql $INFO$
BEGIN
RAISE NOTICE 'STATISTICS IMPORT SCHEMA: %', :DB_QTL_SCHEMA;
RAISE NOTICE 'STATISTICS RASTER PROJECT: %', :RST_QTL_PROJECT;
RAISE NOTICE 'STATISTICS RASTER VERSION: %', :RST_QTL_VERSION;
END $INFO$;
-- =================================================================
-- Clean up the temporary database schema
-- =================================================================
DROP SCHEMA IF EXISTS :DB_SCHEMA CASCADE;
CREATE SCHEMA :DB_SCHEMA;
....
似乎变量在psql语言范围DO $$... END $$
中不可见。所以我收到一个错误:
$ psql daisi_2017_06_06 < create-stats-schema.sql
ERROR: Syntax error at »:«
LINE 3: RAISE NOTICE 'DAISI STATISTIC IMPORT SCHEMA: %', :DB_QTL_SCH...
^
操作系统:Linux DEBIAN 8; Postgresql 9.4
@Anuraag Veerapaneni:提供没有冒号的代码块和错误
DO LANGUAGE plpgsql $INFO$
BEGIN
RAISE NOTICE 'STATISTICS IMPORT SCHEMA: %', DB_QTL_SCHEMA;
RAISE NOTICE 'STATISTICS RASTER PROJECT: %', RST_QTL_PROJECT;
RAISE NOTICE 'STATISTICS RASTER VERSION: %', RST_QTL_VERSION;
END $INFO$;
德语原文错误:
$psql daisi_2017_06_06 < create-stats-schema.sql
FEHLER: Spalte »db_qtl_schema« existiert nicht
ZEILE 1: SELECT DB_QTL_SCHEMA
此致
答案 0 :(得分:2)
直接的方法不起作用。有一种基于GUC的解决方法 - 全局用户配置。
ides_jmmaj=# \set xxx 'Hello'
ides_jmmaj=# set custom.xxx to :'xxx';
SET
ides_jmmaj=# do $$
ides_jmmaj$# begin
ides_jmmaj$# raise notice '%', current_setting('custom.xxx');
ides_jmmaj$# end;
ides_jmmaj$# $$;
NOTICE: Hello
DO
变量前缀如“custom”。是强制性的 - 但可以有任何文字。
答案 1 :(得分:0)
使用%引用变量,如下所示。你能否删除&#34;:&#34;并检查
RAISE NOTICE '%', variable_name;