是否有Postgres管理员GUI可以执行包含多个sql文件的主文件


8

我正在编写一个很长的脚本。我想将脚本分解为更小,更易于管理的脚本,并将每个sql文件包含在主文件中,然后仅执行主文件。

例: master.sql

内容(我不知道使用的语法):

file1.sql
file2.sql
file3.sql

我已经找到了一些有关psql -f在命令行中使用并\i包含这些文件的教程,但是这里的首选是避免终端,并使用GUI来管理我的数据库并执行master.sql脚本。

在任何postgres管理GUI中都可以吗?大概不在 pgAdmin中。


您可以在任何编辑器中编辑SQL文件(比pgAdmin更好的选项),然后仅在psql中运行单个命令(例如psql -f master.sql)。
dezso

好的,那么我会很清楚:您大概无法在pgAdmin中做到这一点。无论如何,我真的看不出为什么会有这个问题(我可能已经习惯了这种限制)。
dezso

感谢您的评论。而你就可以看出这一个问题,如果不解决,如果你试图做什么,我想在pgAdmin的。正如您所说,这可能是pgAdmin的限制(WADU),因此我将编辑问题以打开它,以要求提供任何可以执行此操作的postgres GUI。
jbits 2013年


谢谢@a_horse_with_no_name。我在引用的URL中注意到:“如果所包含的SQL脚本包含SELECT查询,则这些查询的结果将不会显示在GUI中”。我的脚本有很多选择语句。为了确认免责声明,我在包含选择的非常简单的脚本上使用WbInclude命令测试了该产品,并确认它不显示结果。我想知道为什么?无论如何,除此之外,该产品肯定可以在脚本中调用其他脚本。
jbits 2013年

Answers:


2

一个psql脚本

假设psql脚本可以01_mydb.psql在当前工作目录中索引多个文件,并且您有一个01包含文件01_schema.sql和的目录02_types.sql

01_mydb.psql 可能看起来像这样。

\i 01/01_schema.sql
\i 01/02_types.sql

或者,但是您想要构建它。如果事情变得更复杂并且需要更多顺序,请添加更多子目录

\i 01/10_tables/01_foo.sql
\i 01/10_tables/02_bar.sql

那你要么要么..

  1. 在中添加索引文件01,类似于./01/10_tables.psql
  2. 或者,只需将它们全部添加到 01_mydb.sql

我会告诉第二种方法使用find

利用find以产生主负载脚本。

让我们继续创建该结构。

01/
├── 01_schema.psql
├── 02_types.psql
└── 10_tables
    ├── 01_foo.psql
    └── 02_bar.psql

这是我们用来创建它的命令。

mkdir 01
touch 01/01_schema.sql
touch 01/02_types.sql
mkdir 01/10_tables
touch 01/10_tables/01_foo.sql
touch 01/10_tables/02_bar.sql

现在您可以find用来生成加载脚本

find ./01/ -type f -printf '\\i %p\n' | sort | tee master.psql
\i ./01/01_schema.sql
\i ./01/02_types.sql
\i ./01/10_tables/01_foo.sql
\i ./01/10_tables/02_bar.sql

现在跑步master.psql;

psql -d database -f master.psql
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.