Простой пример запроса Postgres в Ruby - PullRequest
41 голосов
/ 13 января 2011

Для жизни я не могу найти простой пример запуска чего-то вроде

"SELECT * FROM MyTable"

в Ruby.Все, что я нахожу, предполагает ORM или Rails.Сейчас я не хочу ORM;Я не хочу Rails.Я ищу что-то автономное, которое использует гем pg и выполняет простой запрос.

Ответы [ 4 ]

52 голосов
/ 13 января 2011

Из документации по 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 => '...', см. здесь для всех доступных параметров.

31 голосов
/ 24 февраля 2011

Попробуйте это:

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
1 голос
/ 20 мая 2018

Я собрал пример, который будет работать, если у вас установлены Docker, ruby ​​и гем pg:

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
1 голос
/ 19 октября 2017

Для более новых версий (например, от 0.18.3 до текущей последней версии 0.21.0) gem pg вместо использования:

conn = PGconn.connect(*args)

(Константы PGconn, PGresult и PGError устарели и будут удалено с версии 1.0.)

Вы должны использовать conn = PG.connect(*args), например:

require 'pg'

conn = PG.connect("IP-Address", 5432, '', '', "database-name", "username", "password")
res = conn.exec('select product_id, description, price from product')

res.each do |row|
    puts row
end

Ссылка: гем pg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...