【问题标题】:Use Ruby to query a Postgres DB using a db url使用 Ruby 使用 db url 查询 Postgres 数据库
【发布时间】:2014-11-02 07:29:57
【问题描述】:

在 Ruby 脚本中,我想通过 URL 连接到 Postgres DB,并执行简单的SELECT * FROM users hello world 查询。

有什么宝石可以做到这一点?我还没有找到任何可以让我通过 URL 连接的 gem。

我发现最有前途的是 https://bitbucket.org/ged/ruby-pg/wiki/Home,但它的所有文档链接都已损坏,而且 Github 存储库使它看起来不是一个受欢迎的选择。

【问题讨论】:

    标签: ruby postgresql


    【解决方案1】:

    “pg”gem 是 Ruby 中 Postgres 支持的 THE gem(假设您没有使用 JRuby)。

    这是最终源自https://bitbucket.org/ged/ruby-pg/wiki/Home 的宝石。不确定您遇到了什么问题。也许一个问题是,如果你将它添加到你的 Gemfile 中,那么你应该使用名称“pg”而不是过时的名称“ruby-pg”。

    是什么让你觉得它不受欢迎?

    我觉得 wiki 看起来不错(主页最近一次更新是在 2 个月前)。如果您对 wiki 有任何问题,请向维护人员报告。

    至于通过“URL”进行连接,您是指 JDBC 样式的 URL 吗?

    【讨论】:

      【解决方案2】:

      JDBC 样式的 URL?

      The pg gem 是 Ruby 的主要 PostgreSQL 接口,支持用于指定要连接的数据库的 URL。那是因为它只是 PostgreSQL 的libpq 的一个包装器,而libpq 支持三种指定连接的方式:

      • hostpassword 等的单独设置已传递到库;

      • dbname=mydb user=fred password=d00rmat host=localhost port=5432 sslmode=require这样的PostgreSQL“连接字符串”;或

      • JDBC 样式的 URL,例如 jdbc:postgresql://fred:d00rmat@localhost:5432/mydb?sslmode=require

      所以你不需要做任何特别的事情。 pg 通过libpq 已经支持它。

      Web 服务式查询?

      现在,如果您实际上想要查询一个 PostgreSQL 数据库就像一个 Web 服务 API,例如

      http://my-postgresql-server/q?query="SELECT * FROM users;"
      

      并得到如下响应:

      [
          {"id":1, "name":"fred", ...},
          ...
      ]
      

      ... PostgreSQL 不直接支持。您将需要一个中间层工具来公开 PostgreSQL 的 Web 服务 API 和代理。 非常认真考虑允许客户端应用程序发送任意 SQL 的安全隐患;这通常是一个非常糟糕的设计,您应该编写一个适当的 Web 服务 API,并使用如下请求方法:

      http://my-appserver/api/1.0/fetchAllUsers
      

      【讨论】:

        【解决方案3】:

        形成pg gem document,您可以通过调用new 方法来建立数据库连接,通过提供哈希、字符串和数组的参数,具有3 种样式。

        我意识到你可以像这样提供一个 URL 字符串作为参数字符串。

        conn = PG::Connection.new("postgresql://postgres@mypassword@localhost:5432/mydb")
        

        它也有效。

        【讨论】:

          猜你喜欢
          • 2016-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-28
          • 1970-01-01
          • 1970-01-01
          • 2014-08-01
          • 1970-01-01
          相关资源
          最近更新 更多