Exemple simple de requête Postgres dans Ruby

Pour la vie de moi je ne peux pas trouver un exemple simple de simplement courir quelque chose comme

"SELECT * FROM MyTable"

en rbuy. Tout ce que je trouve suppose un ORM ou Rails. Pour l’instant, je ne veux pas d’ORM; Je ne veux pas de Rails. Je cherche quelque chose de autonome qui utilise le gem pg et exécute une requête simple.

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 un DB qui nécessite 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 constucteur avec les parameters:
PGconn.new(host, port, options, tty, dbname, login, password) ou utilisez un hachage comme :password => '...' voir ici 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 nouvelles versions (par exemple, 0.18.3 à la dernière version actuelle 0.21.0) 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 devez 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 Docker, Ruby et le pg gem sont installés:

 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 <"1", "name"=>"foo"}, {"id"=>"2", "name"=>"bar"}, {"id"=>"3", "name"=>"baz"}] docker rm -f $db