Ruby中Postgres查询的简单示例

时间:2011-01-13 17:20:11

标签: ruby postgresql

对于我的生活,我找不到一个简单的例子来运行像

这样的东西

"SELECT * FROM MyTable"

在Ruby中

我发现的一切都假设是ORM或Rails。现在,我不想要ORM;我不想要Rails。我正在寻找一些独立的东西,它使用pg gem并执行一个简单的查询。

5 个答案:

答案 0 :(得分:52)

来自pg gem文档(http://rubydoc.info/gems/pg/0.10.0/frames

require 'pg'
conn = PGconn.open(:dbname => 'test')
res  = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')
res.getvalue(0,0) # '1'
res[0]['b']       # '2'
res[0]['c']       # nil

我的下一个问题是使用需要密码的数据库进行身份验证。 看起来你可以发送这样的连接字符串:
PGconn.connect( "dbname=test password=mypass") 或使用带参数的构造函数:
PGconn.new(host, port, options, tty, dbname, login, password)或使用:password => '...'之类的哈希值查看here所有可用选项。

答案 1 :(得分:30)

试试这个:

require 'pg'

conn = PGconn.connect("ip adddress", 5432, '', '', "db name", "user", "password")
res  = conn.exec('select tablename, tableowner from pg_tables')

res.each do |row|
  puts row['tablename'] + ' | ' + row['tableowner']
end

答案 2 :(得分:1)

对于宝石pg的较新版本(例如0.18.3至当前最新版本0.21.0),而不是使用:

joblib

(PGconn,PGresult和PGError常量已被弃用,将会是 从版本1.0开始删除。)

您应该使用conn = PGconn.connect(*args) ,例如:

conn = PG.connect(*args)

参考链接:gem pg

答案 3 :(得分:0)

如果您安装了Docker,ruby和pg gem,我会将一个示例放在一起:

db=pgexample

docker rm -f $db &> /dev/null
docker run -itd --name $db -p 4242:5432 postgres:10

sleep 3 # wait for postgres to start

docker exec -u postgres $db psql -c "
    CREATE TABLE things (
        id serial PRIMARY KEY,
        name varchar (50) NOT NULL
    );

    INSERT INTO things (name) VALUES ('foo');
    INSERT INTO things (name) VALUES ('bar');
    INSERT INTO things (name) VALUES ('baz');
"

docker exec -u postgres $db psql -c 'SELECT * FROM things;'
#  id | name
# ----+------
#   1 | foo
#   2 | bar
#   3 | baz
# (3 rows)

ruby <<EOF
require 'pg'

conn = PG.connect(dbname: 'postgres', host: 'localhost', user: 'postgres', port: 4242)
q = ARGV.first || 'SELECT * FROM things;'
p conn.exec(q).to_a
EOF
# [{"id"=>"1", "name"=>"foo"}, {"id"=>"2", "name"=>"bar"}, {"id"=>"3", "name"=>"baz"}]

docker rm -f $db

答案 4 :(得分:0)

在新版本中,您需要使用 PG::Connection 而不是 PGconn

它是这样工作的:

require 'pg'

conn = PG::Connection.open(dbname: 'test')

res = conn.exec_params('SELECT $1 AS a, $2 AS b, $3 AS c', [1, 2, nil])
res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')

查看 pg 文档:https://deveiate.org/code/pg/PG/Connection.html