为 MS SQL Server 制作构建系统很容易:
{
"cmd": ["sqlcmd", "-S", ".", "-i", "$file"],
"selector": "source.sql",
"shell": true
}
对于 PostgreSQL,我试过这个:
{
"env": {"PGPASSWORD": "password"},
"cmd": ["C:/PostgreSQL/9.3/bin/psql.exe", "-U", "postgres", "-f", "$file"],
"selector": "source.postgresql",
"shell": true
}
但是,虽然使用 MS SQL 我可以使用 USE
关键字从脚本中引用数据库,但 Postgre 中没有这样的功能,所以上面的构建无法工作,在我看来我会必须对每个数据库进行硬编码以构建系统,这在这种情况下是无意义的。
关于如何实现这项工作的任何想法 - 在任意 PostgreSQL 数据库上从 Sublime Text 运行 sql 脚本?
最佳答案
构建系统的 "cmd"
数组的内容必须是您在命令行上键入的内容才能运行该命令 - 数据库也不异常(exception)。我对 Postgres 的内部结构一无所知,但如果您需要在命令行上指定数据库的名称,那么您必须在构建系统中进行。
但是,除了拥有可能存在的数十个构建系统之外,还有一种替代方法 - 在 .sublime-project
文件中定义构建系统。根据documentation ,.sublime-project
文件可以有三个基本组:"folders"
、"settings"
和 "build_systems"
。要创建项目,请打开要包含在边栏中的文件夹,然后单击 Project -> Save Project As...
。输入它的名字并将其保存在一个合乎逻辑的地方。然后,选择 Project -> Edit Project
,这将使用 JSON 语法打开 .sublime-project
文件。它应该看起来像这样:
{
"folders":
[
{
"follow_symlinks": true,
"path": "C:\\Users\\MattDMo\\Development\\DB\\my_postgres_db1"
// by default, Sublime uses double-backslashes :(
}
],
}
在 "folders"
的右方括号后添加一个 "build_systems":
标识符,并放入您的构建系统:
{
"folders":
[
{
"follow_symlinks": true,
"path": "C:\\Users\\MattDMo\\Development\\DB\\my_postgres_db1"
}
],
"build_systems":
[
{
"name": "my_postgres_db1",
"cmd": ["C:/PostgreSQL/9.3/bin/psql.exe", "-W", "-U", "postgres", "-d", "my_postgres_db1", "-f", "$file"],
// you can use either double backslashes or forward slashes on Windows. Forward is better :)
"selector": "source.postgresql",
"shell": true
}
]
}
您应该准备就绪。现在您有了模板,您可以根据需要制作任意数量的文件副本,并根据需要自定义数据库名称和构建系统名称。 "name"
字段将显示在 Tools -> Build System
菜单中,您可以直接选择它,也可以使用 Automatic
如果您没有任何其他带有 "selector": "source.postgresql"
的构建系统。
对于您拥有的每个数据库,它确实涉及一些工作,并且您必须记住在切换数据库时切换事件项目(我只为每个事件项目打开一个窗口),但其他比它应该解决你的问题。你会注意到我删除了 "env": {"PGPASSWORD": "password"},
行(无论如何它应该在方括号中)并添加了 -W
psql.exe
的命令行选项以提示输入密码。没有办法加密 .sublime-project
文件,因此任何可以阅读它们的人都会看到您服务器的密码。我不知道使用 "shell": true
是否会导入你的 shell 的环境变量,我怀疑它不会,但你必须测试。在运行构建系统时输入是一回事,但它会使您的整个系统更加安全。当然,如果您不想/不需要额外的安全性,请随时恢复,但如果它是面向公众的服务器,我不会。
祝你好运!
关于postgresql - 如何为 PostgreSQL 构建构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25889097/