【问题标题】:How to change script variable of postgis script in batch如何批量更改postgis脚本的脚本变量
【发布时间】:2020-11-20 10:19:34
【问题描述】:

我有一个这样的脚本:

DO $$
DECLARE someName TEXT;
BEGIN
  someName := 'something';
  DELETE FROM schema.tablename1 WHERE someColumn= someName ;
  DELETE FROM schema.tablename2  WHERE someColumn= someName ;
  DELETE FROM schema.tablename3  WHERE someColumn= someName ;
END $$;

保存为something.sql

现在我想用这段代码批量调用这个脚本: [POSTGISPATH]\psql.exe -h [HOSENAME] -p [PORT] -U [USERNAME] -d [DB] -f [SCRIPTPATH]\something.sql

而且效果很好。但现在我希望这个 someName := 'something' 可以在批处理文件中进行更改。

SET SOMETHING= 'something'

[POSTGISPATH]\psql.exe -h [HOSENAME] -p [PORT] -U [USERNAME]  -d [DB] -f  [SCRIPTPATH]\something.sql

我想把我的 SQL 脚本改成这样:

DO $$
DECLARE someName TEXT;
BEGIN
  someName := %SOMETHING%;
  DELETE FROM schema.tablename1 WHERE someColumn= someName ;
  DELETE FROM schema.tablename2  WHERE someColumn= someName ;
  DELETE FROM schema.tablename3  WHERE someColumn= someName ;
END $$;

知道怎么做吗?

【问题讨论】:

标签: sql postgresql postgis


【解决方案1】:

您是否考虑过在批处理文件中提供列值作为参数?例如:

数据样本

CREATE TABLE t (f text);
INSERT INTO t VALUES ('foo'),('bar');
CREATE TABLE t2 (f text);
INSERT INTO t2 VALUES ('foo'),('bar');

批处理文件

#!/bin/bash

psql -d db -h localhost -c "
DELETE FROM t WHERE f= '$1' ;
DELETE FROM t2 WHERE f= '$1' ;
"

执行文件并从表中删除所有foo 记录

$ ./test.sh foo

然后记录消失了:

$ psql -d db -h localhost -c "SELECT * FROM t,t2"
  f  |  f  
-----+-----
 bar | bar

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2015-07-24
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多