如何为PostgreSQL构建系统

时间:2014-09-17 11:17:05

标签: postgresql sublimetext sublimetext3 postgresql-9.3

为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脚本?

2 个答案:

答案 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进行交互的文件。