OSS探訪GitHubでログイン

RubyからPostgreSQLへ接続しquery・COPY・type casting・async I/Oを扱うnative client gem

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
869
主要言語
C
ライセンス
BSD-2-Clause
リポジトリ最終更新
2026/10/02
ページ内ナビ

概要

pgはRubyからPostgreSQLのlibpqへ接続するnative extensionです。query/result APIに加え、text/binary type map、COPY、prepared/parameterized query、Fiber scheduler対応などを提供し、Rails/ActiveRecordを含むRuby applicationのPostgreSQL接続基盤として使われます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

PG::ConnectionとPG::ResultでPostgreSQL queryを扱う

connection、parameterized query、result iterationなどPostgreSQL clientの基本APIをRubyから利用できます。PostgreSQL 10以降をsupport対象としています。

出典:[1][3]

text/binary type mapとCOPYでdata conversionを制御する

Integer、timestamp、JSON/JSONB、array、record等のencoder/decoderと複数のTypeMapを組み合わせ、query parameter・result・COPYのRuby型変換をcustomizeできます。

出典:[1]

Fiber.schedulerとnonblocking libpq interfaceを利用する

pgは内部でlibpqのnonblocking connection modeを使い、RubyのFiber schedulerが登録されている場合はblocking I/Oをschedulerへ渡せるよう設計されています。

出典:[1]

向いている用途

Ruby/Rails applicationでPostgreSQL clientを直接またはORM経由で使う場合に向く

RubyからPostgreSQLへ低level accessしたい場合だけでなく、ActiveRecord等のconnection poolの下位driverとして利用する用途にも適します。

出典:[1]

導入前の確認

v1.7.0はRuby 3.1未満をsupportしない

1.7.0ではRuby 2.7/3.0 compatibilityが削除され、gemspecはRuby 3.1以上を要求します。binary gemはlibpqを内包しますが、source gemではlibpq headers等が必要です。

出典:[2][3][1]

同じPG objectを複数thread/fiberから同時操作しない

READMEは異なるPG::Connectionをthread/fiberごとに使う並行利用は可能としつつ、同じPG objectを複数thread/fiberから同時accessすることは安全でないとしています。1.7.0ではSQL injectionやinteger overflow等の修正も含まれます。

出典:[1][2]

参考にした公式資料

  1. [1]pg v1.7.0 README(2026-10-04)
  2. [2]pg v1.7.0 changelog(2026-10-04)
  3. [3]pg v1.7.0 gemspec(2026-10-04)
  4. [4]pg BSD 2-Clause license(2026-10-04)
編集部からの補足

1.7.0はRuby 3.1未満をsupportしません。binary gemはlibpqを内包しますが、source gemはlibpq headers等が必要です。同一PG objectの複数thread/fiber同時操作も避けてください。

3ステップで試す

  1. 1

    pg 1.7.0用のisolated Bundler projectを作る

    Ruby 3.1+環境でpgをversion固定します。

    mkdir -p ruby-pg-demo && printf 'source "https://rubygems.org"\ngem "pg", "1.7.0"\n' > ruby-pg-demo/Gemfile
  2. 2

    pg gemをinstallする

    対応platformではbinary gemが選ばれ、source gemの場合はlibpq headers等が必要です。

    cd ruby-pg-demo && bundle install
  3. 3

    DB接続せずpgとlibpq versionを確認する

    PostgreSQL serverへ接続せず、loaded gemとbundled/system libpqのversionだけを確認します。

    cd ruby-pg-demo && bundle exec ruby -rpg -e 'puts "pg=#{PG::VERSION}"; puts "libpq=#{PG.library_version}"'
公式READMEで確認

成長

成長の推移 · 直近30日

869 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
28
Open PR
6

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

カテゴリ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • ruby
  • database
  • postgresql
  • rdbms
  • client
  • c
Stars
869
Forks
200
Watchers
28
Open Issues
10
Contributors
61
所有者種別
User
主要言語
C
ライセンス
BSD-2-Clause
リポジトリ最終更新
2026/10/02

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?