我像这样对我的数据库运行脚本......
psql -d myDataBase -a -f myInsertFile.sql
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我希望能够在此命令中指定运行脚本的模式.我可以调用set search_path ='my_schema_01',但这些文件应该是可移植的.我怎样才能做到这一点?
a_h*_*ame 66
您可以创建一个包含该set schema ...语句的文件,然后包含您要运行的实际文件:
创建一个文件run_insert.sql:
set schema 'my_schema_01';
\i myInsertFile.sql
Run Code Online (Sandbox Code Playgroud)
然后用以下方法调用:
psql -d myDataBase -a -f run_insert.sql
Run Code Online (Sandbox Code Playgroud)
Nux*_*Nux 46
更通用的方法是设置search_path(应该在PostgreSQL 7.x及以上版本中工作):
SET search_path TO myschema;
Run Code Online (Sandbox Code Playgroud)
请注意,set schema myschema这是8.x中不可用的上述命令的别名.
另见:http://www.postgresql.org/docs/9.3/static/ddl-schemas.html
Mar*_*agh 33
主要例子
下面的示例将使用schema myschema在数据库mydatabase上运行myfile.sql.
psql "dbname=mydatabase options=--search_path=myschema" -a -f myfile.sql
Run Code Online (Sandbox Code Playgroud)
这种方式的工作方式是psql命令的第一个参数是dbname参数.文档提到可以提供连接字符串.
如果此参数包含=符号或以有效的URI前缀(postgresql://或postgres://)开头,则将其视为conninfo字符串
该DBNAME关键字指定要连接的数据库和选项关键字,可以指定命令行选项,以在连接启动发送到服务器.这些选项在服务器配置章节中有详细说明.我们用于选择模式的选项是search_path.
另一个例子
下面的示例将使用schema myschema连接到数据库mydatabase上的主机myhost.必须使用转义序列对特殊字符进行转义.=%3D
psql postgres://myuser@myhost?options=--search_path%3Dmyschema
Run Code Online (Sandbox Code Playgroud)
该PGOPTIONS环境变量可以用来以灵活的方式来实现这一目标。
在Unix shell中:
PGOPTIONS="--search_path=my_schema_01" psql -d myDataBase -a -f myInsertFile.sql
Run Code Online (Sandbox Code Playgroud)
如果脚本或子外壳程序中有多个调用需要相同的选项,PGOPTIONS则只设置一次并导出它会更简单。
PGOPTIONS="--search_path=my_schema_01"
export PGOPTIONS
psql -d somebase
psql -d someotherbase
...
Run Code Online (Sandbox Code Playgroud)
或使用PGOPTIONS外部设置调用顶层shell脚本
PGOPTIONS="--search_path=my_schema_01" ./my-upgrade-script.sh
Run Code Online (Sandbox Code Playgroud)
在Windows CMD环境中,set PGOPTIONS=value应该可以正常工作。
| 归档时间: |
|
| 查看次数: |
89722 次 |
| 最近记录: |