为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中没有这样的功能,因此上面的构建无法正常工作,而且在我看来我也是如此。 ll必须硬编码每个数据库以构建在这种情况下非感知的系统。
任何想法如何使这项工作 - 从任意PostgreSQL数据库上的Sublime Text运行sql脚本?
答案 0 :(得分:1)
构建系统的"cmd"
数组的内容需要是您在命令行上键入的以运行该命令的内容 - 数据库也不例外。我对Postgres内部结构一无所知,但是如果你需要在命令行中指定数据库的名称,那么你必须在构建系统中完成它。
但是,有一种替代方案可能存在数十个构建系统 - 在.sublime-project
文件中定义构建系统。根据{{3}},.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 :(
}
],
}
在"build_systems":
的结束方括号后添加"folders"
标识符,并放入您的构建系统:
{
"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"
的任何其他构建系统。
它确实涉及到您拥有的每个数据库的一些工作,并且您必须记住在切换DB时切换活动项目(我只为每个活动的项目保持一个窗口打开),但其他比它应该解决你的问题。您会注意到我删除了"env": {"PGPASSWORD": "password"},
行(它应该放在方括号中),而是将-W
命令行选项添加到psql.exe
以提示输入密码。无法加密.sublime-project
文件,因此任何可以读取它们的人都会看到您的服务器密码。我不知道是否使用"shell": true
导入shell的环境变量,我怀疑它没有,但你必须测试。运行构建系统时输入是一回事,但它会使整个系统更安全。当然,如果您不想要/需要额外的安全性,请随时恢复,但如果它是面向公众的服务器,我不会。
答案 1 :(得分:0)
解决方法:
{"cmd": ["psql", "-d", "$file_base_name", "-U", "username", "-f", "$file"]}
提供您在Sublime中用于与与数据库同名的psql进行交互的文件。