2011-01-13 14 views
39

Per la vita di me non riesco a trovare un semplice esempio di solo in esecuzione qualcosa comesemplice esempio di interrogazione Postgres in Ruby

"SELECT * FROM MyTable"

in Ruby. Tutto quello che sto cercando presuppone un ORM o Rails. Per ora, non voglio ORM; Non voglio Rails. Sto cercando qualcosa di standalone che usi il pg gem ed esegua una semplice query.

+3

Grazie per questa domanda. Ho cercato di trovare la risposta su google, ma tutta la documentazione che ho trovato sembra presumersi che io sappia già come usare ruby-pg. – Muxecoid

risposta

49

Dalla documentazione pg gemma (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 

La mia domanda successiva sarebbe l'autenticazione con un DB che richiede una password. Sembra che è possibile inviare una stringa di connessione come questo:
PGconn.connect("dbname=test password=mypass") o utilizzare il constuctor con i parametri:
PGconn.new(host, port, options, tty, dbname, login, password) o utilizzare un hash come :password => '...' vedi here per tutte le opzioni disponibili.

+3

Buon esempio semplice, grazie. Ho esperienza con PostgreSQL tramite psql, python, Java e Perl ma non ho mai usato Ruby, e questo ha reso banale verificare che l'installazione della mia gemma Pg andasse bene. Apprezzato. –

+0

Come si stampa questo risultato in una tabella, come se fosse nello strumento pgadmin gui? – stack1

30

Prova questo:

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

Sembra che questo usi la gemma 'postgres' che è stata sostituita dalla gemma 'pg': https://rubygems.org/gems/postgres – rogerdpack

+0

Come si stampa questo risultato in una tabella, come se fosse nel gui pgadmin strumento? – stack1

+0

Ho modificato la risposta per essere un po 'più chiara. Stai recuperando una serie di hash, quindi puoi inviarlo come preferisci. L'esempio precedente stamperà le righe di "tablename | owner". –

0

Per le versioni più recenti (ad esempio, 0.18.3 fino all'attuale versione 0.21.0) del gioiello pg, invece di utilizzare:

conn = PGconn.connect(*args) 

(le costanti PGconn, PGresult e PGError sono obsolete, e saranno rimosso dalla versione 1.0)

si dovrebbe usare conn = PG.connect(*args), ad esempio:.

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 

collegamento Riferimento: gem pg