RubyでPostgreSQLを使うために知っておきたい最低限のこと(pgを使います)

ruby-postgresql-top PostgreSQL
スポンサーリンク

RubyでPostgreSQLを使用するために、最低限知っておきたい事をまとめました。

実際に自分が使ってみて、「これは先に知っておきたかった!」となったものを中心に記載しています。

余談ですが、現在、PostgreSQLチューニングのハンズオン記事を執筆しています。その中で、「Rubyで簡単に擬似的な業務処理を書きたい!」となりこの記事を書きました。

公式サイト

GitHub - ged/ruby-pg: A PostgreSQL client library for Ruby
A PostgreSQL client library for Ruby. Contribute to ged/ruby-pg development by creating an account on GitHub.
スポンサーリンク

pgの準備

PostgreSQLの接続に pg と呼ばれるGemを使用します。

インストール方法は以下の通り。

1.Gemfileに以下を記載をする

$ gem 'pg'

2.インストールする

$ bundle install

以上でインストールは完了です。

RubyからPostgreSQLに接続する方法

DBへの接続情報の指定方法には、いくつかやり方があります。

今回は、よく使いそうなHash指定とURI(String型)の2パターンを紹介します。

require 'pg'

# Hash指定のパターン
db = 'database'
host = 'db'
user ='user'
password = 'password'
port = 5432

conn = PG::Connection.new(host: host, port: port, dbname: db, user: user, password: password)

# URIパターン
uri = 'postgres://username:password@host:5432/dbname'

conn = PG::Connection.new(uri)

なお、接続に失敗するとPG::Errorの例外が発生します。

【参考】34.1.1 Connection Strings

32.1. Database Connection Control Functions
32.1.Database Connection Control Functions # 32.1.1. Connection Strings 32.1.2. Parameter Key Words The following functi...

RubyからPostgreSQLにクエリを投げる方法

exec_params(sql, params) を使用してクエリを実行します。

exec()にparamsを指定した場合は自動でexec_params()が呼ばれます。

require 'pg'

uri = 'postgres://username:password@host:5432/dbname'

conn = PG::Connection.new(uri)
conn.exec_params('SELECT * FROM $1 WHERE ', ['sample'])

この例だと「$1」の部分に「’sample’」が代入さてクエリが実行されます。

複数変数を指定したい場合は、$2, $3, …のように指定し、実際に代入するパラメータは代入したい順番に記載していきます。

尚、結果はPG::ResultというObjectが返ってきます。

conn.exec_params()で取得した結果の色々な使い方!

同じ記述が続くため、★部分以外は共通だと思って頂けたら!

conn.exec_params('SELECT * FROM $1 WHERE ', ['sample']) do |result|
  # ★
end

クエリを実行して取得した結果の行数

result.count

取得した全量の値

result.values

取得した行を個別に処理する

result.each do |row|
  # 取得した行がHashになっています。(row.カラム名のような形式で値を取得することが可能。)
end

以上

プロフィール
この記事を書いた人
katsuya

SESからキャリアをスタートし、現在はフリーランスとして活動しています。フリーランスになってから6年で年収1,000万円を達成しました。「Study Infra」では、今までの経験やITインフラに関する情報を発信中です。

katsuyaをフォローする
PostgreSQLRuby
スポンサーリンク
シェアする
katsuyaをフォローする

コメント

タイトルとURLをコピーしました