【问题标题】:reading from config file in a sql script从 sql 脚本中的配置文件读取
【发布时间】:2021-02-25 21:58:58
【问题描述】:

我有一个 sql 脚本,我在其中创建应用程序中使用的所有序列,如下所示。对于不同的服务器,这些值会有所不同。 我不想给出这些硬编码的值,而是想在一些配置文件中指定这些值 有没有办法可以从我的 sql 脚本中的配置文件中读取所有这些值

创建序列 tbl1_tbl1id_seq AS INT START WITH 1 INCREMENT BY 2 MAXVALUE 50000;

创建序列 tbl2_tb21id_seq AS INT START WITH 1 INCREMENT BY 2 MAXVALUE 50000;

创建序列 tbl3_tbl3id_seq AS INT START WITH 1 INCREMENT BY 2 MAXVALUE 50000;

【问题讨论】:

  • 抱歉,我需要更多详细信息 - 哪个 DBMS?微软 SQL?甲骨文? MySQL?怎么调用每台服务器上的sql脚本文件?
  • Postgres。此脚本将创建序列,删除表(如果存在)并创建所有表。此 sql 脚本将以 sudo 用户身份在每台服务器上运行。
  • sudo 用户的意思是,你在 linux 上工作。所以我看到了不同的解决方案的可能性:a)如果 Postgres 具有类似 Microsoft SQL 的功能,您可以在 SQL 和 IF 等中编码所有配置值。调用正确的 SQL 命令和/或将 SQL 变量设置为正确的值,有脚本变量以及b)在控制台中调用命令以执行sql之前,以某种方式使用其他linux命令(例如sed)和配置文件创建/修改它。那么这不是SQL问题c)更多的可能性.. .
  • 我可以这样做,如下所示,发布我的答案。

标签: sql sequence multi-master-replication


【解决方案1】:

我可以通过以下方式做到这一点。 我编写了一个 shell 脚本,它会逐行读取配置文件,并生成写入新文件的 sql 语句。最后,我从脚本本身执行新的 sql 脚本

INPUT=config.txt
OLDIFS=$IFS
IFS=','
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }


while read sequencename start_value increment_by maxvalue
do
        echo "SequenceName : $sequencename"
        echo "start value: $start_value"
        echo "increment by : $increment_by"
        echo "max_value : $maxvalue"
echo "CREATE SEQUENCE $sequencename  AS INT START WITH $start_value INCREMENT BY $increment_by MAXVALUE $maxvalue;" >> createsequence.sql
#done < $INPUT
done < <(tail -n +2 $INPUT) #This skips reading the header
IFS=$OLDIFS

config.txt 包含以下几行,

sequencename,start_value,increment_by,maxvalue
tbl1_tbl1id_seq , 1,2 ,50000;
tbl2_tbl2id_seq , 1,2, 50000;
tbl3_tbl3id_seq , 1, 2,50000;

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多