Hom*_*lli 29 postgresql bash psql
我试图自动化一组创建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
Run Code Online (Sandbox Code Playgroud)
我希望能够编写一个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
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何建议?(你可能已经猜到了,我是一个shell脚本新手.)
为了进一步澄清这个问题,我想知道:
Erw*_*ter 46
首先,千万不能混psql元命令和SQL命令.这些是单独的命令集.有些技巧可以将它们组合起来(使用psql元命令\o和\\管道字符串到shell中的psql),但如果可以的话,请远离它.
我假设您作为系统用户运行,postgres并且您拥有postgresPostgres超级用户.默认端口5432上的同一数据库集群中的所有数据库和用户postgres由于IDENT设置pg_hba.conf(默认设置)而具有无密码访问权限.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Run Code Online (Sandbox Code Playgroud)
我将新模板db基于系统模板db template0.在这里阅读更多相关信息.
你的问题:
如何(...)从文件中运行一组pgsql cmds
尝试:
psql mytemplate1 -f file
Run Code Online (Sandbox Code Playgroud)
批量示例:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Run Code Online (Sandbox Code Playgroud)
命令选项-f使得psql在文件中执行SQL命令.
如何在命令行上基于现有模板创建数据库
psql -c 'CREATE DATABASE myDB TEMPLATE mytemplate1'
Run Code Online (Sandbox Code Playgroud)
命令选项-c使psql执行单个SQL命令字符串.可以是多个命令,终止于;- 将在一个事务中执行,并且只返回最后一个命令的结果.
阅读手册中的psql命令选项.
如果未提供要连接的数据库,psql则将使用名为的默认维护数据库postgres.在第二个答案中,与我们连接的数据库无关.
| 归档时间: |
|
| 查看次数: |
75694 次 |
| 最近记录: |