2011-04-14 3 views
12

PostgreSQL 데이터베이스와 상호 작용하는 루비 스크립트를 작성하려고합니다. 설명서에서이 작업을 수행하는 방법을 함께 모으기 위해 노력하고 있지만 훌륭한 튜토리얼이나 샘플 코드는이 작업을 수행하는 데 소요되는 시간을 줄이기 위해 경이로운 작업을 수행합니다. 누구나 링크가 있거나 팁을 공유하거나 공유 할 수있는 코드가 있으면 가장 감사하게 생각합니다.Ruby PostgreSQL 튜토리얼

편집, 더 명확이 메모를 만든 :

참고 :이 레일 액티브, 나는 레일에서 완전히 독립적 인 프로그램에 참여하는 루비 스크립트를 작성하고 함께 할 수 없습니다. 당신은 그들이이 데이터베이스 연결을 사용 ActiveRecord::Base에서 상속 모델을 정의 할 때

require 'pg' 

ActiveRecord::Base.establish_connection(:adapter => "postgresql" 
             :username => "username", 
             :password => "password", 
             :database => "database") 

:

+0

이것은 레일과는 관련이 없습니다. – providence

+0

흠, 나는 모든 사람들이 다소 혼란 스럽다고 생각합니다. 나는 레일이 아닌 내 자신의 ActiveRecord를 사용하려고합니다. 그러나 루비에서 데이터베이스 연결에 대한 정보를 보게되어 기쁘게 생각합니다. 일을 구현하는 더 좋은 방법이 있다는 것을 자주 발견합니다. 미래의 독자들에게도 좋은 자료가 될 것입니다. – providence

+0

레일즈와 별도로 ActiveRecord를 사용할 수도 있고 Sequel이나 DataMapper처럼 다른 ORM을 사용할 수도 있습니다. 내가 속편을 더 좋아한다. 특정 DBM에 대해 SQL을 직접 코딩하는 대신 ORM을 사용하는 것이 좋습니다. 앞으로 다른 데이터베이스 관리 프로그램으로 변경해야하는 경우, 지원하는 경우 ORM을 사용하는 것이 쉽습니다. –

답변

4

당신은 단지 pg 보석을 필요로하고, DB에 대한 연결을 설정해야합니다. 다른 모든 것은 레일스에서와 같이 작동해야합니다.

+9

왜이 대답이 받아 들여지지 않습니까? 귀하의 질문에 대답하지 않는, 당신은 레일이나 ActiveRecord 다루지 않는 지적했다. – broschb

+0

그는 간단한 루비 스크립트를 작성하고 있으며, 관련이없는 전체 프레임 워크를 가져오고 싶지 않습니다./ –

+0

Active Record는 데이터베이스 연결 작업에 완벽하게 적합합니다. 조금 더 가벼운 것을 원한다면 Sequel gem을 사용할 수도 있습니다. AR은 제가 당시에 알고 있던 것이 었습니다. 따라서 그것은 내가 추천 한 것입니다. –

20

어떤 postgresql 라이브러리를 사용하고 있는지 좀 더 자세히 알려주십시오.

ActiveRecord를 제외하고 'pg'보석을 사용하려고합니다.

프로젝트 소스에 도움이 될만한 html 파일이 있습니다. https://bitbucket.org/ged/ruby-pg/src/b477174160c8/doc/postgres.html 다음 html의 오른쪽 상단에있는 "원시"를 클릭하십시오. 웹 브라우저에서 파일을 엽니 다.

이 샘플 코드 (HTML 파일에서 복사)을 연결하는 데 도움이 :

require "postgres" 
conn = PGconn.connect("localhost", 5432, "", "", "test1") 
# or: conn = PGconn.open('dbname=test1') 
res = conn.exec("select * from a;") 

입술 객체가있는 PGresult이다. html의 해당 섹션으로 스크롤하여 어떤 메소드를 호출 할 수 있는지 확인하십시오.

이 링크가있는 PGresult 예제가 있습니다 http://rubydoc.info/gems/pg/0.10.0/PGresult

발췌 :

나는 "포스트 그레스"패키지는 시대에 뒤 떨어진, 당신은 "페이지"를 필요로 확인
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 
+2

Btw, html 파일이 오래된 것일 수 있습니다. 나는 당신이 'postgres'대신에 'pg'를 요구할 필요가 있다고 생각한다. – Kelvin

14

.

루비와 포스트그레스로 기본 select * from films을 사용하는 데 많은 시간이 걸립니다. 내가 어떤 생각으로, 여기에 내 코드입니다 :

포스트 그레스 준비

$ su postgres 
psql 
CREATE USER roger WITH PASSWORD '123456'; 

GRANT ALL PRIVILEGES ON DATABASE megatest to roger; 

megatest=# GRANT SELECT ON films TO PUBLIC; 

PG 패키지 준비

sudo gem install pg 

루비 코드

(데이터베이스 = megatest 사용자 = 로저 = 123456 테이블 = 필름을 통과)
require 'pg' 

conn=PGconn.connect(:hostaddr=>"127.0.0.1", :port=>5432, :dbname=>"megatest", :user=>"roger", :password=>'123456') 
# or for a non IP address :host => 'my.host.name.com' instead of hostaddr 

# run the query 
res = conn.exec("SELECT * FROM films") 

# Ran only once in order to get field Name 
fieldArray=res.fields() 
fieldArray.each do |elem| 
    print "elem="+elem+"\n" 
end 

# print data from the query 
res.each{ |row| 
    puts "Code="+row["code"] +" title="+row["title"] +" did="+row["did"] +" date_prod="+row["date_prod"] +" kind="+row["kind"] +" len="+row["len"] 
} 

,536 결과
[email protected]:/home/eblain/ruby# ruby postgresTest.rb 
Code=UA502 title=Bananas did=105 date_prod=1971-07-13 kind=Comedy len=01:22:00 
Code=UA503 title=Cowboy did=105 date_prod=1979-07-13 kind=Horror len=01:32:00 
Code=UA544 title=YoBro did=105 date_prod=1981-07-13 kind=Action len=01:42:00 
+1

답을 해독하기가 어렵습니다. 서식을 더 쉽게 사용할 수 있도록 수정할 수 있습니까? –

+0

mac에서 로컬 postgres 주입을 위해 호스트 이름은 무엇입니까? – HMLDude

3

매개 변수가있는 SQL 문의 경우 PGconn#exec_params을 사용해야합니다.

conn = PGconn.new(:dbname => 'test') 
conn.exec_params(
    'INSERT INTO comedians (first_name, last_name) VALUES ($1, $2)', 
    ['Louis', 'CK']) 
conn.close 

출처 : PGconn 생성자에 전달 될 수있는 매개 변수의 전체 목록에 대한 http://deveiate.org/code/pg/PGconn.html

Look here.