Pour ma vie, je ne peux pas trouver un exemple simple de simplement courir quelque chose comme
"SELECT * FROM MyTable"
en rubis. Tout ce que je trouve suppose un ORM ou des Rails. Pour le moment, je ne veux pas d'ORM; Je ne veux pas de Rails. Je cherche quelque chose de autonome qui utilise la gem pg et exécute une requête simple.
Extrait de la documentation 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
Ma prochaine question serait l'authentification avec une base de données nécessitant un mot de passe. On dirait que vous pouvez envoyer une chaîne de connexion comme ceci:PGconn.connect( "dbname=test password=mypass")
Ou utilisez le constuctor avec les paramètres:PGconn.new(Host, port, options, tty, dbname, login, password)
ou utilisez un hash comme :password => '...'
voir ici pour toutes les options disponibles.
Essaye ça:
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
Pour les versions les plus récentes (par exemple, la version 0.18.3 à la version 0.21.0 la plus récente) de gem pg, au lieu d'utiliser:
conn = PGconn.connect(*args)
(Les constantes PGconn, PGresult et PGError sont obsolètes et seront supprimées à partir de la version 1.0.)
Vous devriez utiliser conn = PG.connect(*args)
, par exemple:
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
Lien de référence: gem pg
J'ai mis en place un exemple qui fonctionnera si vous avez installé Docker, Ruby et le 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