【发布时间】:2011-12-21 18:41:26
【问题描述】:
我正在尝试自动化一组创建 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 脚本新手。)
编辑
为了进一步澄清这个问题,我想知道:
- 如何编写 groksqlcommands.sh(从文件运行一组 pgsql cmds 的 bash 脚本)
- 如何在命令行基于现有模板创建数据库
【问题讨论】:
-
您的问题含糊不清。首先,您要使用多个文件创建模板数据库。但是随后您的代码示例尝试基于模板数据库创建多个数据库。你到底想做什么?
-
@ErwinBrandstetter:不完全是。我会尽力澄清。一个(sql 命令)文件包含一组文件来创建一个 SINGLE 模板数据库。 (sql 命令)文件和模板数据库之间存在 1:1 映射。我想创建一个自动创建数据库的 bash 脚本。创建的数据库是从之前在脚本中创建的模板数据库“派生的”。 bash 脚本根据运行时脚本变量创建不同的模板数据库(及其派生数据库)。 HTH。
-
更正:一个(sql命令)文件包含一组SQL命令来创建一个SINGLE模板数据库。
标签: bash postgresql psql