为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所以上面的构建不能工作,似乎我必须硬编码每个数据库来建立系统,这在这种情况下是无意义的。
有什么想法让这个工作-从Sublime文本在任意的PostgreSQL数据库上运行sql脚本?
发布于 2014-09-18 00:45:05
构建系统的"cmd"数组的内容必须是您在命令行中输入的内容,以便运行该命令-DB也不例外。我对Postgres的内部机制一无所知,但是如果您需要在命令行上指定DB的名称,那么您必须在构建系统中执行此操作。
然而,除了可能有几十个构建系统之外,还有一种选择--在一个.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
}
]
}你应该都准备好了。现在您有了模板,您可以根据需要创建任意数量的文件副本,自定义DB名称和构建系统名称。Tools -> Build System菜单中将显示"name"字段,您可以直接选中它,或者如果您没有任何其他包含"selector": "source.postgresql"的构建系统,也可以使用Automatic。
这确实涉及到您拥有的每个DB的一些工作,并且您必须记住在切换DB时切换活动项目(我只是为我的活动项目保持一个打开的窗口),但除此之外,它应该可以解决您的问题。您会注意到,我删除了"env": {"PGPASSWORD": "password"},行(无论如何,它应该放在方括号中),而是在psql.exe中添加了-W命令行选项来提示输入密码。没有办法加密.sublime-project文件,所以任何可以阅读它们的人都会看到您服务器的密码。我不知道是否使用"shell": true导入了您的shell的环境变量,我怀疑它不会,但您必须进行测试。在运行构建系统时,这是一回事,但它会使整个系统更加安全。当然,如果你不想/需要额外的安全性,你可以随意恢复,但如果它是一个面向公众的服务器,我就不会。
祝好运!
发布于 2018-08-30 18:47:16
解决方法:
{"cmd": ["psql", "-d", "$file_base_name", "-U", "username", "-f", "$file"]}为您在Sublime中用于与psql交互的文件提供与您的数据库相同的名称。
https://stackoverflow.com/questions/25889097
复制相似问题