gpt4 book ai didi

bash - 在文件中执行 pgsql 命令的 Shell 脚本

转载 作者:行者123 更新时间:2023-11-29 08:42:42 25 4
gpt4 key购买 nike

我正在尝试自动化一组创建 TEMPLATE 数据库的过程。

我有一组文件(file1、file2、... fileN),每个文件都包含一组创建 TEMPLATE 数据库所需的 pgsql 命令。

文件 (createdbtemplate1.sql) 的内容大致如下所示:

CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8';

\c mytemplate1

CREATE TABLE first_table (
--- fields here ..
);

-- Add C language extension + functions
\i db_funcs.sql

我希望能够编写一个 shell 脚本来执行文件中的命令,这样我就可以编写如下脚本:

# run commands to create TEMPLATE db mytemplate1
# ./groksqlcommands.sh createdbtemplate1.sql

for dbname in foo foofoo foobar barbar
do
# Need to simply create a database based on an existing template in this script
psql CREATE DATABASE $dbname TEMPLATE mytemplate1
done

关于如何做到这一点有什么建议吗? (您可能已经猜到了,我是一个 shell 脚本新手。)

编辑

为了进一步澄清问题,我想知道:

  1. 如何编写 groksqlcommands.sh(一个将从文件运行一组 pgsql 命令的 bash 脚本)
  2. 如何在命令行基于现有模板创建数据库

最佳答案

首先,不要混合使用psql 元命令和SQL 命令。这些是单独的命令集。有一些技巧可以将它们结合起来(使用 psql 元命令 \o\\ 并将字符串传递给 shell 中的 psql),但这很快就会让人感到困惑。

  • 让您的文件只包含 SQL 命令。
  • 不要在 SQL 文件中包含 CREATE DATABASE 语句。单独创建数据库,您有多个文件要在同一个模板数据库中执行。

假设您以 OS 用户 postgres 身份运行,并将数据库角色 postgres 作为(默认)Postgres super 用户使用,所有数据库都在由于 pg_hba.conf 中的 IDENT 设置,默认端口 5432 上的相同数据库集群和角色 postgres 具有无密码访问 - 默认设置。

psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"

我的新模板数据库基于默认的系统模板数据库 template0Basics in the manual here.

您的问题

How to (...) run a set of pgsql cmds from file

尝试:

psql mytemplate1 -f file

目录中批量文件的示例脚本文件:

#! /bin/sh

for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done

命令选项-f 使psql 执行文件中的SQL 命令。

How to create a database based on an existing template at the command line

psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'

命令选项-c 使psql 执行单个SQL 命令字符串。可以是多个命令,由 ; 终止 - 将在一个事务中执行,并且只返回最后一个命令的结果。
了解 psql command options in the manual .

如果您不提供要连接的数据库,psql 将连接到名为“postgres”的默认维护数据库。在第二个答案中,我们连接到哪个数据库是无关紧要的。

关于bash - 在文件中执行 pgsql 命令的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com