サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
lets.postgresql.jp
笠原 辰仁 本記事は2015年のPostgreSQL Advent Calendarの 12/3 の記事です。PostgreSQL9.3でサポートされたLATERALについての解説と使いどころについて紹介します。 はじめに PostgreSQLは幅広くSQL標準(ではないものも含む)の句や構文をサポートしており、それが製品の特徴の一つでもあります。PostgreSQL8.4でサポートされたWindow関数やWITH句はその引き合いに出されることが多いです。 さて、PostgreSQL9.3からはLATERALという句がサポートされています。やや地味で使われることが少ないため、ご存知の方は少ないかもしれません。しかし、LATERAL句は、使いどころによっては非常に強力な武器になります。 注意 本記事ではテーブル定義や実行計画等を記載している箇所がありますが、幅の表示上、見やすいように改行して
Site map An overview of the available content on this site. Keep the pointer still over an item for a few seconds to get its description.
SRA OSS, Inc. 日本支社 石井 達夫 はじめに 本記事は2013年のPostgreSQL Advent Calendar の 12/17 の記事です。pgpool-IIに多数のクライアント同時に接続すると、極端にレスポンスが落ちることがあります。ここではその原因と改善方法について考えます。 pgpool-IIはpre-fork型のアーキテクチャ pgpool-IIは、複数のPostgreSQLを使ったクラスタシステムを構築できるミドルウェアです。pgpool-IIでは、num_init_childrenというパラメータの数だけあらかじめプロセスを起動(pre-fork)しておきます。クライアントからの接続要求があると、そのプロセスの一つがカーネルから選択され、クライアントからの接続を受付けて、処理を開始します。これはApacheなどと同じ方式で、あらかじめプロセスをフォークして
SRA OSS, Inc. 日本支社 石井 達夫 はじめに 本記事は2014年のPostgreSQL Advent Calendar の 12/17 の記事です。2014年11月7日にリリースされた pgpool-II 3.4の新機能を紹介します。 pgpool-IIとは pgpool-IIは、複数のPostgreSQLを使ったクラスタシステムを構築できるミドルウェアです。pgpool-IIは、PostgreSQLクライアントと、複数のPostgreSQLの間に割り込む形でproxyのように動作します。既存のPostgreSQLアプリケーションを、ほとんど変更することなく利用することができます。 もっとも多いpgpool-IIの使い方としては、PostgreSQLを複数台使ったストリーミングレプリケーション構成によるクラスタの管理サーバとして使用するものです。以下のような機能が利用できます
(1) はじめに 本記事では、OSS 統合監視ソフトウェア Zabbix を利用した PostgreSQL の監視方法を紹介します。 (2) 統合監視ソフトウェアとは システム監視は、ハードウェアの稼働監視、CPU などのリソース監視や アプリケーション監視など多岐にわたります。 監視や監視データの保存、障害が発生したときの通知設定を一元的に行って システム監視を自動化するソフトウェアを、統合監視ソフトウェアと呼びます。 統合監視ソフトウェアを用いると、内部状態が刻々と変化するデータベースの稼働状況と OS の状態を容易に蓄積できるので、障害発生時の通知だけでなく、障害が発生する前に データベース状態を把握することで対策を取ることもできるようになります。 また過去取得したデータを元に障害発生後に原因を追究したり将来を予想するなどに 役立てることができます。 オープンソースで利用できる統合監
笠原 辰仁 本記事は2013年のPostgreSQL Advent Calendar の 12/25 の記事です(地味なトピックになってしまいすいません)。PostgreSQLでのテストデータ作成に役立つ機能を紹介します。 はじめに PostgreSQLを対象としたの性能検証や機能検証を行う際に、開発環境や試験環境でスキーマ(テーブルやインデックス)を作成し、ダミーのデータを投入してSQLのチェックを行うことが多々あるかと思います。単純な機能の正常試験であれば少量のデータ投入で事足りると思いますが、大量のデータに対する検索処理やバッチ処理を試す際は、それなりの量の試験データを生成し、DBに投入する必要があります。 通常、試験データは、例えば専用のジェネレータを作る、実際のデータをマスキングしたものを使う、サンプルとして存在するデータ(郵便番号のデータなど)を利用する、といったことが多いと思
笠原 辰仁 本記事は2013年のPostgreSQL Advent Calendar の 12/9 の記事です。PostgreSQLのオブジェクト識別子(OID)を上手く活用する方法を紹介します。本記事の内容はマニュアルでも詳しく書かれているので参考にしてください。 オブジェクト識別子とは、PostgreSQLがDB内部に格納している様々なオブジェクト(テーブルやインデックス、関数、演算子、データ型定義などなど)を一意に識別するためのIDです。PostgreSQLをよくお使いの方は、OIDという名称の方がなじみがあるかもしれません。以降はOIDと呼びます。 OIDは、PostgreSQLインスタンスで一意の値を持つ32bitの整数です。ユーザやシステム(PostgreSQL)がオブジェクトを作る際にこのOIDが発行され割り当てられます。システムテーブルや組み込みの関数、演算子、データ型など
どうしてガベージの発生量が減ったのか? これの答えは、「常時行われる処理の中で、ガベージの回収を行うようになったから」です。PostgreSQLは、更新処理や削除処理を行った場合、古いデータは消さずに残しておきます。この古いデータ = ガベージを除去し、空き領域として再利用可能とする処理がVACUUMです。HOTは、常時実施されている SELECT, INSERT, UPDATE の処理の中で、VACUUM相当の処理をページ単位で実施するようになったのです(図5)。 図5. HOTによるガベージの掃除 しかし、これだけ見ると単純にVACUUMを細かな単位でバックグラウンド的に実施されるようになっただけに見えますね。実は、これが実現できたのは先ほどの「インデックスの不要な更新をスキップ」できるようになったからなのです。ガベージの掃除をする時に最も注意するのは、除去する行が完全に他から参照され
はじめに SRA OSS, Inc. 日本支社 石井 達夫 pgpool-IIは複数のPostgreSQLを使ったクラスタシステムを構築できるミドルウェアです。そこでpgpool-IIを実際の業務システムで動かすためには、通常、マシンを複数用意したり、それぞれにPostgreSQLをインストールすることが必要になります。それだけでなく、pgpool-II自体の設定ファイルや、フェイルオーバやオンラインリカバリのためのスクリプトも設定してあげないといけません。これらは結構敷居が高い要求で、「pgpool-IIがなんとなく良さそうなので試してみたい」と思ってもいる人も簡単には手が出せない原因となっていました。 pgpool_setupとは そこで今回ご紹介するのが、pgpool-II 3.3から同梱されるようになった「pgpool_setup」というツールです。pgpool_setupはコマン
はじめに 2013 年 8 月に pgpool-II 3.3 がリリースされました。このバージョンでは、複数の pgpool-II を連携させ、可用性を高める機能である watchdog 関して、いくつか新機能が追加されました。 中でも大きな変更は、pgpool-II 間の死活監視に新しい方法が追加されたことです。 本記事では、この新しい監視方法を用いた pgpool-II 3.3 の watchdog 機能について解説します。 pgpool-II および watchdog について pgpool-II とは pgpool-II は、PostgreSQL のクライアントアプリケーションと、(複数の)PostgreSQL の間に割り込んで入る proxy のような形で利用するミドルウェアです。直接 PostgreSQL を使うのではなく、pgpool-II を経由することによって、コネクショ
3.2 性能面の着目点2:スケーラビリティ ここまで性能とその安定性を検証してきました。 ここでは「コストパフォーマンス」という観点から、CPU スケーラビリティに関する検証結果をご紹介します。 大規模システムでスケールアップの要求を満たせるのかという観点で、参照系トランザクションを主体に構成される TPC-W モデルを参考に作られた DBT-1 というベンチマークプログラムを用いて CPU スケーラビリティを計測してみました。 図3.2-1 IA サーバでは 16 コアまではスケールする事が確認できましたが、4 → 8 コアでのスケーラビリティに比べ、 8 → 16 コアでのスケーラビリティは低くなっており、コストパフォーマンスの観点で PostgreSQL 8.4 は 8 コアマシンで使用するのがお勧めと言えます。 また、今回ご紹介しませんが OS・ハードウェアアーキテクチャの点から、
はじめに pgAgentはPostgreSQLのジョブ・スケジューラです。似たような機能を持つものにMicrosoftの SQL Server Agentがあります。pgAgentは、Windows, Linux, MacOS X, Solaris, FreeBSDなど、いろいろなOSで動作します。pgAgentを使うと、権限を持ったユーザが、単一または複数のSQLやシェルコマンド、バッチコマンドなどをスケジュール通りに実行できます。古いレコードをアーカイブしたり、日々のトランザクションをバッチ処理する、というようなメンテナンス用の処理を実行させるのが一般的な利用方法です。 通常は、pgAgentをデータベースが稼働している同じサーバにインストールして使いますが、複数のpgAgentを、データベースが稼働するサーバ以外のサーバにインストールする方がよい場合もあります。pgAdminを使うと
オンメモリクエリキャッシュとは? 端的に言うと、SELECT の結果をメモリ上にキャッシュとして保存しておいて、 同じ SELECT がきたときに、即座にそのキャッシュした結果を返すしくみです。 キャッシュが存在する場合には、SELECT 文をパース(構文解析)したり実際に実行したりしなくなるので、非常に高速です。 以下は、この機能に関する文書です。 場合によっては、飛躍的な性能向上が見られます。 更新がそんなに頻繁でなく、apache など同じユーザが同じ SELECT をたくさん発行するようなシステムでは、 大きな効果が得られるかもしれません。 特に、それが重い SELECT である場合には、めざましい改善が期待できるでしょう。 以下はその一例のグラフで、横軸は pgbench -S -c 10 -T 10 を実行した回数、 縦軸は TPS(Transactions Per Secon
PEAR::MDB2 MDB2はPHPでデータベースを操作するためのPEARのパッケージの1つです。MDB2の簡単な説明や、コネクトの方法、フェッチモードの設定などはプレースホルダ編を参照していただくことにして、ここでは実際にクォートをする例を説明します。 MDB2でクォートする まずはSQLに埋め込む値をそれぞれ型にあわせてクォートする例を見てみましょう。 $res = $mdb2->query( 'UPDATE users’ . ' SET profile = ' . $mdb2->quote($_REQUEST['profile'], 'text') . ' WHERE userid = ' . $mdb2->quote($_SESSION['me']['userid'], 'integer') ); $res->free(); $all = $mdb2->queryAll( 'SE
笠原 辰仁 ・ NTTデータ 江川大地 PostgreSQL Unconference 2013年2月16日に市ヶ谷の(株)アシストさんのオフィスにて、JPUG主催の、日本(世界でも?)初のPostgreSQLのアンカンファレンスが開催されました。場所と1セッションあたりの時間だけ決められており、講演者や講演内容は当日に決まるというある意味"ゆるい"カンファレンスでした。それでも当日は40名近い参加者が集まり賑やかなイベントとなりました。本レポートはアンカンファレンスの模様をざっくりとお伝えします。 主催者挨拶 最初に、JPUGの永安氏(@snaga)から挨拶がありました。この時点ではまだ講演内容など一切が決まっていませんでした。とりあえず、1セッションの最大時間を20分とし、2トラックでそれぞれ10セッションを走らせるというスケジュールが伝えられました。その後、会場の入り口にあるホワイト
FORCIA, Inc. 板垣 貴裕 PostgreSQL は SQL から利用できる関数 (以下、SQL関数) を豊富に提供しています。 今回は文字列の処理に注目して、SQL関数と、プログラミング言語の標準ライブラリが提供する機能を比較してみます。 比較対象のプログラミング言語は Java と JavaScript です。 PostgreSQL での文字列型の使い方全般に関しては、「文字列処理と日本語全文検索」も参照してください。 全般的な比較 SQL, Java, JavaScript すべて、文字列は変更不可能なオブジェクトです。 また、空文字と null は異なることも、すべての言語で共通しています。 違いとしては、文字のインデックス (添字, 文字の位置) の表現方法があります。 SQL関数では、最初の文字のインデックスは 1 です。 一方、Java, Java Script で
SRA OSS, Inc. 日本支社 石井 達夫 現在開発中のPostgreSQL 9.3ですが、徐々に新機能が出揃ってきました。その中の一つに「更新可能VIEW」("Updatable view")というのがあります。これはその名の通り、更新可能なVIEWを作る機能です。 VIEWとは? VIEWとは、実際には存在しないテーブルのことで、CREATE VIEWというコマンドを使って定義します。VIEWは一種のマクロと考えることができ、よく使うSELECT文をVIEWとして定義することにより、複雑なSELECT文を毎回打ち込む手間を省くことができます。 たとえば、 CREATE VIEW mytable_foo AS SELECT * FROM mytable WHERE id = 'foo'; としておくと、 SELECT * FROM mytable_foo; とするだけで、 SELE
メインコンテンツに移動 pgpool-II を使用した PostgreSQL の様々なクラスタ構成を紹介します。 ブックナビゲーション 入門向けの記事 技術的な記事 PostgreSQL13の新機能 PostgreSQL 8.4 の新機能 PostgreSQL 9.0 の新機能 PostgreSQL 9.1 の新機能 PostgreSQL 9.2 の新機能 PostgreSQL 9.3 の新機能 PostgreSQL 9.4の新機能 PostgreSQL 9.5の新機能 PostgreSQL 9.6の新機能 PostgreSQL10の新機能 PostgreSQL11の新機能 PostgreSQL12の新機能 PostgreSQL14の新機能 PostgreSQL15の新機能 PostgreSQL16の新機能 pgpool-II 3.2 の新機能 pgpool-II 3.3 の watchd
PostgreSQL では、ユーザが独自にユーザ定義関数の処理系を定義することができます。 そこで各種言語用のサーバサイドスクリプトがサードパーティーによって提供されています。 主なものとしては、Ruby, Java, PHP などがあります。 それでは、もう少し詳しく PostgreSQL の構造を見てみましょう。 バックエンド側はいくつかのプロセスから構成されています。 postgres (常駐プロセス) バックエンドを管理する常駐プロセスです。 "postmaster" とも呼ばれます。 デフォルトでは postgres は UNIX ドメインソケットと TCP/IP の 5432 番のポートを listen しており、フロントエンドがここに接続するのを待ち受けています (Windows など、一部のプラットフォームでは TCP/IP のみ)。 待ち受けるポート番号は Postgre
SRA OSS, Inc. 日本支社 石井 達夫 ラージオブジェクトとは たいていのDBにはBlob(Binary large object)などと呼ばれる、巨大オブジェクトを扱う仕組みがあります。これを使うと、画像や動画、あるいは巨大なテキストなどをDBで扱うことができるようになります。PostgreSQLの場合には、「ラージオブジェクト」(Large Object)と呼ばれており、PostgreSQLのラージオブジェクトは、今のところデフォルトで2GBまで、9.3以降では4TBまでを扱えるようになります(この改良は、安齋氏、長田氏、それに私によって行われました)。 普通のファイルに画像や動画をおいて管理する方法もありますが、ラージオブジェクトを使うメリットとしては、 PostgreSQLがアクセス手段を提供してくれるので、リモートにあるオブジェクトをアクセスする方法をアプリケーションが
メインコンテンツに移動 ブックナビゲーション 目的別ガイド:導入検討編 目的別ガイド:インストール編 目的別ガイド:運用管理編 目的別ガイド:チューニング編 目的別ガイド:サポート編 目的別ガイド:内部解析編 RSS feed
watchdog とは 従来の pgpool-II で複数の PostgreSQL を連携させる場合、pgpool-II 自体、あるいは pgpool-II が動いているサーバや OS に障害が発生すると全体のサービスが停止してしまうため、ここが単一障害点(Single Point Of Failure: SPOF)となっていました。watchdog は、複数の pgpool-II の連携によってこの問題を解決し、pgpool-II の可用性を高める機能です。この機能により、サービスを提供する主系(アクティブ)の pgpool-II に障害が発生した場合でも、それを検知した待機系(スタンバイ)の pgpool-II が主系に取って代わって運用を継続する、すなわち pgpool-II のフェイルオーバが実現可能になりました。 今まではこのような構成をとるためには pgpool-HA というパ
最新のメジャーバージョンとなるPostgreSQL 9.2 が2012/9 にリリースされました。本記事では、PostgreSQL9.2の新機能をいくつかピックアップしてご紹介します。 9.2 では、ロックの改善やIndex Only Scanのサポートなどの性能改善をはじめ、レプリケーション機能の強化、JSON型や範囲型のサポート、ログメッセージや監視機能の充実など、多方面に渡る改良がバランスよく行われています。 性能強化 9.2ではIndex Only Scanやスケーラビリティの向上など、様々な性能強化が図られています。特に、Index Only Scanは9.2の目玉機能の一つとなっています。 Index Only Scan 読んで字の如く、インデックスのみを読むスキャン機能です。この機能により、インデックスキーの付与されている列だけを参照するSELECT処理速度がぐっと向上してい
日本語などASCII以外の文字集合を使う場合は、そのシステムでどの文字セットをメインに使用するか、ということが最初に決めるべき事項の1つです。代表的なものにShift_JIS(SJIS、SJIS-win)、EUC-JP(eucJP-win)、UTF-8、UTF-16などがあります。 ただShift_JISなど、バックスラッシュ(≒エスケープ記号)が通常の文字の2バイト目として含まれてれる可能性のある文字エンコーディングでは、正規表現関数(preg_*** あるいは eregなど)や、マルチバイト文字列関数(mb_***)などの関数が正しく動かないケースや、各種エスケープ処理が意図した通りには動作してくれないことが多々あります。 また、PHPの内部エンコーディングをPostgreSQLで使用する文字セットと揃えておくことで、変換にかかるサーバ上のコストや変換で生じる脆弱性を低減することができ
※本ニュースは、石井達夫氏による紹介 を 転載させていただいています。 ※ Let's Postgres では近日、それぞれの新機能について詳しく紹介する予定です。ご期待ください! 待望の PostgreSQL 9.2.0 がついにリリースされました。 PostgreSQL 9.2.0 では、大幅な性能改善や各種の機能追加が行なわれています。 検索性能の大幅な改善。マルチ CPU 環境では最高 64 コアまで検索性能が向上することが確認されています。 インデックスだけを見て検索を行なう "index only scan" により、 特に大規模データで数十倍の性能向上が得られる場合があります。 スタンバイサーバから更に別のスタンバイサーバにレプリケーションを行なう カスケードレプリケーション アナウンス(英語) http://www.postgresql.org/about/news/14
はじめに 2012 年 8 月にリリースされた pgpool-II 3.2 では、 DBへの検索リクエストを実効的に高速化するオンメモリクエリキャッシュ、 可用性を高めるウォッチドッグ機能などが搭載され、より PostgreSQL を高速、安全に利用できるようになりました。 本記事では、まず pgpool-II 3.2 の概要を説明します。オンメモリクエリキャッシュとウォッチドッグに関しては、 別ページで詳細に解説します。 pgpool-IIとは pgpool-II についてまだあまりご存知のない方のために、pgpool-II とは何かという事を簡単にご紹介します。 すでに pgpool-II についてよくご存じの方は、次の章までとばして頂いて構いません。 pgpool-II は、PostgreSQL のクライアントアプリケーションと、(複数の)PostgreSQL の間に割り込んで
第四企画 坂井 潔 SQLインジェクションの脅威からシステムを守るために、プログラミング言語/スクリプトからSQLを発行するときには、パラメータを適切に処理しなくてはなりません。今回はプレースホルダ編と題し、SQLインジェクション対策として最も簡単で効果的な方法を、PHPで説明します。 SQLインジェクションとは? まず「SQLインジェクション」とは何かおさらいしましょう。SQLインジェクションとは、アプリケーション(この場合はPHPスクリプト)に渡すパラメータの値を操作することで、元々は意図されていない処理をSQLとして実行させてしまうことです。 簡単な例をあげてみます。ユーザーから文字列「山田」が渡されたとき、以下のようなSELECT文を発行することにします。 SELECT * FROM users WHERE username LIKE '%山田太郎%'; ユーザーに入力された文字列
次のページ
このページを最初にブックマークしてみませんか?
『ホーム | Let's POSTGRES』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く