postgresql - 如何为 PostgreSQL 构建构建系统

标签 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 中没有这样的功能,所以上面的构建无法工作,在我看来我会必须对每个数据库进行硬编码以构建系统,这在这种情况下是无意义的。

关于如何实现这项工作的任何想法 - 在任意 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/

相关文章:

ruby-on-rails - 问题将 Rails 应用程序 (SQLite3) 部署到 Heroku (PostgreSQL)

postgresql - 如何让 Postgres 服务器创建并关闭?

c - sublime text 2 无法运行我的 c 程序?

emacs - Sublime Text 2 像 emacs 中的 block 突出显示

keyboard-shortcuts - 如何在 Sublime Text 3 中将焦点从搜索栏更改为编辑器?

keyboard-shortcuts - Sublime Text 3 键绑定(bind) - 使用变量

postgresql - 通过 PostgreSql 函数搜索 'grep-alike'

postgresql - PostgreSQL 中简单的类似存储过程的函数?

regex - Sublime Text 3中的ignore_words中的正则表达式拼写检查?

command-line - 在 Windows 上,“subl”不是内部或外部命令,也不是可运行的程序或批处理文件