タグ

ブックマーク / lets.postgresql.jp (22)

  • PHPでのSQLインジェクション対策 - エスケープ・クォート編 — Let's Postgres

    第四企画 坂井 潔 ここではPHPSQLインジェクション対策としてエスケープ・クォート処理を行うケースを説明します。なおSQLインジェクションの簡単な説明や、プレースホルダを用いてより効果的な対策を行うケースに関してはプレースホルダ編を参照してください。 エスケープとは? それではエスケープ処理とはなんでしょうか? 分かりやすいケースとして、文字列を扱う場合を説明します。 例えば「名前がO'Reillyの行をテーブルusersから取得する」あるいは「テーブルusersに、名前はO'Reilly、メールアドレスはo'reilly@example.comとo'reilly_mobile@example.netの2つを改行で繋げたデータを、行として挿入する」と言ったSQLをつくると、この命令文全体が1つ文字列になります。その命令文としての文字列の中に、値としての文字列を埋め込む場合には、それが

  • PHPから見たPostgreSQLの数値データ型(数値リテラル) | Let's POSTGRES

    smallintはint2、integerはint4 およびint、bigintはint8と同意です。またsequenceを使うという機能を除けば、serialはintegerと、bigserialはbigintと同様の動きをします。これらは小数点以下のない「整数値」です。 serial、bigserialの値のフォーマット・範囲のチェックなどはinteger、bigintと同じですので、以下はそれぞれに読み替えてください。 64bitシステムでの整数値のチェック smallintとinteger まず、値が負でない(すなわちマイナス記号がつかない)ことを必須にしてしまってよければ、smallintやintegerのチェックは簡単です。 if(!ctype_digit($_REQUEST['num']) || $_REQUEST['num'] > 32767) { // NG処理 } これ

  • RPMで複数バージョンのPostgreSQLをインストールしてみよう | Let's POSTGRES

    笠原 辰仁 はじめに この記事は、PostgreSQL Advent Calendar(#5)に参加しています。 以前に、CentOSでPostgreSQLをインストールする方法やyumでPostgreSQLをインストールする方法がLet's Postgresで紹介されました。これらはいずれもRPMを使ったインストール方法でした。ところで、RPMについてはRedHatなどディストリビュータが作成しているものもあれば、コミュニティで作成されているものもあります。CentOSでのインストールはCentOSコミュニティが、yumでのインストールはPostgreSQLのコミュニティがそれぞれ作成しているRPMが配布されています。 最近、といっても昨年の2010年にPostgreSQLの9.0がリリースされた時からですが、コミュニティやCent、RedHatで配布されているRPMのポリシーがいくつか

  • 現場で役立つ実践ノウハウWeb開発の「べし」「べからず」(運用編) | Let's POSTGRES

    ~性能を最大限に引き出すための設計・開発・運用~ 永安 悟史 記事は、技術評論社 WEB+DB PRESS Vol.63 で掲載されたものを、著者と出版社の許可を得て転載したものです。なお、一部 記述に変更のある箇所もあります。 【運用】データベースのPDCA 注4 を回す 注4:Plan(計画)、Do(実行)、Check(評価)、Act(改善)を1サイクルとしたマネジメントプロセスのこと。 【べからず】 サーバログを無視してはいけない 運用の基中の基として、サーバログをきちんと取得し、その内容を確認する必要があります。 ここまでも述べてきたように、データベースの挙動は蓄積されたデータの量や、外部環境(接続数など)によって徐々に変化してきます。そのため、トラブルが起こる前に、ある程度その兆候が出てくるものです。 データベースの挙動が外部からはなかなかわかりづらいですが、実際にはサーバ

  • 現場で役立つ実践ノウハウWeb開発の「べし」「べからず」(試験編) | Let's POSTGRES

    ~性能を最大限に引き出すための設計・開発・運用~ 永安 悟史 記事は、技術評論社 WEB+DB PRESS Vol.63 で掲載されたものを、著者と出版社の許可を得て転載したものです。なお、一部 記述に変更のある箇所もあります。 【試験】サービス開始に向けて、確認・記録する データベース開発の試験フェーズでは、機能的な動作確認は当然ながら、パフォーマンスやバックアップ/リストアなどの、いわゆる「非機能試験」を行うことになります。節では、データベース特有の試験について、いくつかのポイントを解説します。 【べし】 SQLの実行計画(EXPLAIN)を確認すべし まず、アプリケーションから実行されるSQLは、EXPLAINコマンドなどを用いて、実行計画を確認しておく必要があります(リスト5)。動的なSQL(アプリケーションの内部でSQL文を組み立てるようなケース)の場合は、SQLの実行ログを

  • 現場で役立つ実践ノウハウWeb開発の「べし」「べからず」(開発編) | Let's POSTGRES

    ~性能を最大限に引き出すための設計・開発・運用~ 永安 悟史 記事は、技術評論社 WEB+DB PRESS Vol.63 で掲載されたものを、著者と出版社の許可を得て転載したものです。なお、一部 記述に変更のある箇所もあります。 【開発】開発生産性と処理性能のトレードオフ 【べからず】 ループ処理内部でSQLを発行してはいけない アプリケーションの内部で、特定の条件でレコード数をカウントし、FORループを回してレコード数分のSELECTクエリを実行するようなコードを見かけることがあります(リスト1)。 (プログラミング言語の)関数やメソッド呼び出しのような感覚で簡単にSQLを呼び出すことができるため、このようなコードを書いてしまいがちですが、原則としてこのようなコーディングを行うべきではありません。 Webページ1画面を表示するために、SQLを100回あるいは1,000回実行するようなア

  • PostgreSQL の構造とソースツリー(1) — Let's Postgres

    PostgreSQL では、ユーザが独自にユーザ定義関数の処理系を定義することができます。 そこで各種言語用のサーバサイドスクリプトがサードパーティーによって提供されています。 主なものとしては、Ruby, Java, PHP などがあります。 それでは、もう少し詳しく PostgreSQL の構造を見てみましょう。 バックエンド側はいくつかのプロセスから構成されています。 postgres (常駐プロセス) バックエンドを管理する常駐プロセスです。 "postmaster" とも呼ばれます。 デフォルトでは postgres は UNIX ドメインソケットと TCP/IP の 5432 番のポートを listen しており、フロントエンドがここに接続するのを待ち受けています (Windows など、一部のプラットフォームでは TCP/IP のみ)。 待ち受けるポート番号は Postgre

  • 現場で役立つ実践ノウハウWeb開発の「べし」「べからず」(設計編) | Let's POSTGRES

    ~性能を最大限に引き出すための設計・開発・運用~ 永安 悟史 記事は、技術評論社 WEB+DB PRESS Vol.63 で掲載されたものを、著者と出版社の許可を得て転載したものです。なお、一部 記述に変更のある箇所もあります。 前回の復習になりますが、データベースの開発・運用には、データベース特有の注意すべき点があります。すべてを一度に理解することは難しいですが、ここまで解説した次の3点を頭の中におきつつ、以降の解説を読んでください。 データベースを理解するための3ヵ条 データベースの理解は「立体的」に I/Oを制する者はデータベースを制す データベースは生き物である 【設計】「性能」の大枠が決まる 【べし】 データの増加量を考慮して設計すべし 「データベースは生き物である」で述べましたが、データベースの大きな特徴として「稼働しているうちにデータのサイズが大きくなってくる」という点があ

  • 現場で役立つ実践ノウハウWeb開発の「べし」「べからず」 | Let's POSTGRES

    ~性能を最大限に引き出すための設計・開発・運用~ 永安 悟史 記事は、技術評論社 WEB+DB PRESS Vol.63 で掲載されたものを、著者と出版社の許可を得て転載したものです。なお、一部 記述に変更のある箇所もあります。 アーキテクチャから理解するデータベース データベースの技術は長い歴史の蓄積があり、その実装であるデータベース製品は非常に複雑なソフトウェアとなっています。そのため、深く理解するにはそれなりの学習期間と経験を必要とします。 章では、データベースの中でも特にリレーショナルデータベース(RDBMS)について、理解するためのポイント/観点と、具体的に開発/運用時に注意すべき点について解説します。 データベースの理解は「立体的」に データベースの挙動をきちんと理解するためには、データベースを構成する要素を「立体的」、つまり複数の角度/軸で理解する必要があります。 処理の

  • PHPでのSQLインジェクション対策 - エスケープ・クォート編: pg_escape_**** | Let's POSTGRES

    第四企画 坂井 潔 pg_escape_****によるエスケープ PHPからPostgreSQLを操作するためのネイティブな関数としてpg_****関数群があります。データベースへの接続方法はプレースホルダ編を参照していただくことにして、ここではpg_escape_****を使ってエスケープ・クォートをする例を説明します。 以下のpg_escape_****や、その他の関数はすべて、Shift_JISではなく、UTF-8、EUC-JPなどをPHPの内部エンコーディングとして使うことを前提に記述しています。PostgreSQLPHPのエンコーディングが別々だったり、Shift_JISなどを使用した場合、関数が思わぬ挙動をすることがあるので、ご注意ください。 PHPで用意されているpg_escape_string関数とpg_escape_bytea関数はそれぞれ文字列型、bytea型のデータ

  • pg_upgrade | Let's POSTGRES

    NTT オープンソースソフトウェアセンタ 笠原 辰仁 はじめに PostgreSQLでは、定期的なバージョンアップが行われます。バージョンアップには2種類あり、バージョン名 (x.y.z) の x または y が変化するメジャーリリース (8.3 → 8.4) と、z が変化するマイナーリリース (8.3.6 → 8.3.7) です。メジャーバージョンがアップするとDBクラスタの互換性がなくなるため、pg_dump等によるダンプを行い、新版のDBクラスタにデータをリストアする処理が必要です。 このダンプの取得とリストアは、非常に大きなデータを持つシステムでは長時間かかるため厄介でした。この作業が面倒で、古いバージョンを使い続けている方も多いのではないでしょうか?このようなダンプやリストア処理を不要にし、使用中のDBクラスタをそのまま新しいバージョンのPostgreSQLでも使い続けられるよ

  • pgpool-II + Slony-Iクラスタ構成 | Let's POSTGRES

    各サーバマシンには、執筆時点で最新の pgpool-II 3.0.1 と PostgreSQL 9.0.2 をインストールします。pgpool-II のインストール方法については第2回の記事を参考にしてください。 以降、pgpool-II と PostgreSQL は「/usr/local」にインストールされており、データベースクラスタは「/var/pgsql/pgdata」にあるものとします。 また、Slony-I のデーモン slon は、マスタサーバとスレーブサーバで動かします。 PostgreSQLの設定 まず、pgpool-II と Slony-I からの接続を許可するため、マスタサーバとスレーブサーバの pg_hba.conf ファイルに次の1行を追加します。今回は簡易的にパスワード認証を使用せず、trust 認証を使用します。 host all all 192.168.1.0

  • ログ解析にパーティショニングを利用してみよう | Let's POSTGRES

    Hitoshi Harada ここまでで一通り分析を終えました。ある時点での分析を行うことももちろんのこと、継続的にログを分析していき結果を比較していきたいものです。今回のデータは6日ばかりを対象にしているためデータサイズは大きくありませんでしたが、1ヶ月、1年と経過するにつれてサイズが増大します。ここでは、分析を継続していくために必要なテーブルパーティショニング(分割)の技術についてご紹介します。パーティショニングについてはこちらでも紹介しています。併せてお読み下さい。 PostgreSQLにおけるパーティショニング 9.0 現在、PostgreSQLにおけるパーティショニング機能とは、単一ノードにおける水平分割です。つまり、1マシン上において、行を選り分けることでテーブルを分割します。世の中のRDBMSには垂直分割(列による選り分け)をサポートしたり複数ノード(複数のマシン上にテーブル

  • 大量のデータを高速に投入するには | Let's POSTGRES

    FORCIA, Inc. 板垣 貴裕 PostgreSQL に大量のデータを高速に取り込む方法を紹介します。 COPY という専用のコマンドを使うと INSERT よりもずっと高速です。 また、COPY を使う際にひと工夫すると、さらに速くなります。 高速にデータをロードするコマンド INSERT の代わりに COPY FROM を使う PostgreSQL には COPY FROM という大量データ取り込み専用のコマンドがあります。 COPY コマンドは外部からタブ区切り (.tsv) やカンマ区切り (.csv) のファイルを読み込める上に、INSERT よりもずっと高速です。 同様に、pg_dump コマンドも -d や --inserts オプションを付けると INSERT を並べたダンプファイルを作ってしまいます。 オプションを付けないデフォルトでは高速な COPY 形式なので、

  • ログ解析にhstoreを利用してみよう | Let's POSTGRES

    夏目 伸彦 前回では、生ログデータをテーブルに取り込みました。早速解析を始めたいところですが、ちょっと待ってください。 ログ解析をする上で最も気になる点の一つにユーザーの行動等の分析があると思います。今回のログデータの中で、ユーザーの要求、動きが表れているデータは検索条件を表すparamsです。しかしながらparamsはtext型で保持しているため、このままでは扱いやすい形とは言えません。ここで活躍するのがhstoreというデータ型です。 hstoreとは PostgreSQLにはhstore型というキーと値の集合を単一の列に保持できる型があります。paramsの中身であるパラメータ文字列も同様にキーと値の組合せなので、これを使わない手はありません。また、手続き型言語のハッシュテーブル(言語によっては辞書型、マップ等とも呼ばれる)とよく似ているため、手続き型言語になじみのある方には取っつき

  • SQLを使ってログ解析をしよう | Let's POSTGRES

    各項目がカンマ区切りのテキストで1行を構成します。実際には下記のような内容です。 (注)幅の関係で1行のデータを2行に分けて記述しています。 ee1bdfe5b017f8dcddea61b54aa76536,2010-05-13 00:00:03,1,277,DoSearch,sort 安い順 region ハワイ country ハワイ島 ee1bdfe5b017f8dcddea61b54aa76536,2010-05-13 00:00:04,2,115,ShowList,sort 安い順 region ハワイ country ハワイ島 ee1bdfe5b017f8dcddea61b54aa76536,2010-05-13 00:00:06,3,344,DoSearch,date 20100701 sort 安い順 region ハワイ country ハワイ島 ee1bdfe5b017

  • pgpool-II レプリケーション構成 — Let's Postgres

    SRA OSS, Inc 古跡 智仁 章では、pgpool-II によるレプリケーション構成について紹介します。 pgpool-II をレプリケーションモードで動作させて使うことで PostgreSQL サーバのレプリケーション構成を構築することができます。 pgpool-II によるレプリケーション レプリーケーション構成とは、複数ノードにデータの複製を作成する構成のことを指します。pgpool-II は、アプリケーションから受け取った問い合わせをクエリベースで複数ノードに送信して、同じ内容のデータベースを複数ノードで保持することが可能です。ハードディスク障害などで1つのノードが正常に動作しなくなると、これを検知して障害ノードを切り離して縮退動作します。障害検知にあたっては、アプリケーションからのアクセスでエラーになる場合のほか、pgpool-II 自身で定期的なヘルスチェックを行わせ

  • Pgpool-II | Let's POSTGRES

    メインコンテンツに移動 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

  • pgbenchの使いこなし — Let's Postgres

    SRA OSS, Inc. 日支社 石井 達夫 pgbenchとは pgbenchはPostgreSQLに同梱されているシンプルなベンチマークツールです。最初のバージョンは筆者により作成され、日のPostgreSQLメーリングリストで1999年に公開されました。その後pgbenchはcontribという付属追加プログラムとして、PostgreSQLのソースコードとともに配布されるようになりました。どのバージョンでPostgreSQLに取り込まれたのかはPostgreSQL付属のドキュメント(HISTORY)には書かれていないので定かではないのですが、コミットログを見ると、おそらく2000年にリリースされたPostgreSQL 7.0で導入されたと思われます。その後数多くの改良がたくさんの人によって行われ、現在に至っています。 pgbenchを利用することにより、自分の使っているPost

  • PostgreSQL 8.5 の新機能 — Let's Postgres

    NTT オープンソースソフトウェアセンタ 板垣 貴裕 2009年10月24日、PostgreSQL 8.5 の開発マイルストーン版である Alpha 2 がリリースされました。アルファ版は "Alpha Information" からダウンロードできます。 注目の新機能である「参照負荷分散レプリケーション」はまだ取り込まれていませんが、それ以外にも既に数多くの新機能が採用されています。この記事では、完成間近の参照負荷分散レプリケーションの概要と、その他の PostgreSQL 8.5 の新機能について紹介します。 参照負荷分散レプリケーション PostgreSQL 8.5 では、「ホット・スタンバイ」と「ストリーム・レプリケーション」が開発中です。これらを組み合わせることで、PostgreSQL でシングルマスタ - マルチスレーブ型の参照負荷分散クラスタが手軽に組めるようになる見

    okinaka
    okinaka 2009/10/29
    楽しみだ