キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
PostgreSQLでのクラスタ(2019年版)
0
    PostgreSQLでのクラスタ(2019年版)

    本エントリはPostgreSQL Advent Calendar 2019の四日目となります。

    MySQLでのクラスタといえば、MySQL Clusterが長らく(10年以上)定番となっています。
    最近(MySQL 5.7以降) MySQL InnoDB Clusterという構成も出て、盤石の体制となっています。

    翻って、PostgreSQLではどうでしょうか? 以下のWikiと、pdfでどのようなものがあるか、の概略が確認できます。

    Clustering

    PostgreSQLの大規模運用を可能にするクラスタ技術のご紹介

    本エントリでは現在(でも)「ホット」なPostgreSQL Clustering 技術を簡単にご紹介しましょう。

    (1) Pgpool-II
    (2) BDR (Bi-Directional Replication for PostgreSQL)
    (3) Citus

    (1) Pgpool-II
     pgpoolはその名のとおり、コネクションプーリングを実現するミドルウエアとして、みなさんご存じの石井さんにより2003年ころ(PostgreSQLでいうと7.xの後期)に開発されました。その後、各種クラスタ機能を拡充して、Pgpool-IIとなり、現在に至っています。詳細は以下をご覧ください。

    pgpool-II とは(Let's Postgres)
    pgpool-II とは(Pgpool-IIドキュメント)

    Pgpool-IIは長く時間をかけて開発されてきましたし、開発が地道に継続されていますので、要件に合う場合、選択の第一候補となりえます。

    Pgpool-II(Let's Postgres)

    最新バージョンは今年(2019年)10月31日にリリースされた4.1で、4.0,3.7,3.6,3.5がメンテナンス継続されています。

    (2) BDR (Bi-Directional Replication for PostgreSQL)
     BDRとはPostgreSQL 9.4 でサポートされたストリーミングレプリケーションの機能を用いた両方向(Bi-Directional)のレプリケーション、いわゆるマルチマスタのレプリケーションです。2ndQuadrantにより開発されています。(イギリスにある企業で、PostgreSQLを中心としてサービスを展開しています)ストリーミングレプリケーションとBDRを含む、レプリケーションについては以下がよくまとまっています。

    2016年度WG3活動報告書 レプリケーション調査編(PGECons)

    また、ざっくり確認した結果は4年前のPostgreSQL Advent Calendarにもありました。

    PostgreSQL BDR (Bi-Directional Replication) を使ってみた

    このころのBDRはバージョン1で、Windowsには非対応でした。バージョン2を経て、いまはバージョン3が最新です。(PostgreSQL 10以降対応)

    コミッタの澤田さんもジョインして、今後日本での展開が期待されます。

    (3) Citus
     今年(2019年)はじめに、マイクロソフトに買収されたCitus Dataにより開発されたものです。

    MicrosoftがPostgreSQLデータベースを加速するCitus Dataを買収、顧客をAzure化か

     11月4日からAzure Database for PostgreSQL - Hyperscale(Citus)として、一般提供されています。

    ざっとした動作イメージは篠田さんの以下の資料で確認できます。

    Citus検証結果

    Citusを使ってPostgreSQLをスケールアウトしてみよう

    現在の最新バージョンは9.0です。

    基本的にはExtensionとツールですので、オンプレでも動作させることができますが、一部機能はEnterprise Editionのみとなります。(オンラインリバランスなど)

    Microsoftでは「Hperscal(Citus)/OSS RDB on Microsoft Azure Hands on Seminar」を月に一度程度実施しているので、それに参加すると手っ取り早く動作させ、概要がつかみやすいと思います。

    セミナーに参加して話を聞いた限りでは、まだ障害時の機能と運用が発展途上である印象を受けました。
    例えば最初のクエリはすべてCoordinator nodeが受けますが、これを複数ノード置くことはできず、高可用性はストリーミングレプリケーションによるCoordinatorのレプリケーションに頼る、など)

    Frequently Asked Questions

    またSQLの制限も割ときつめですので、あらかじめご確認ください。

    SQL Support and Workarounds(マニュアル)

    個人的にはXC -> XL (そしてX2?)のシェアードナッシングなクラスタが発展していくことを期待していましたが、こちらのほうは難しい感じですね。。。。

    When to use Postgres-BDR or Postgres-XL?

    あ、ちなみに冗長化の手法、名前は「うそぐれす(usogres)」が好きです w

    JUGEMテーマ:コンピュータ



    | meijik | PostgreSQL | 06:57 | comments(0) | trackbacks(0) | - | - |
    PostgreSQL 11 on Windows でPostGIS !
    0
      [PostgreSQL 11 on Windows でPostGIS !]

      本エントリはRDBMS-GIS Advent Calendar 2018の六日目です。

      PostGISは動作確認用にLinuxでいろいろ動作させてきましたが、最近Window関数の評価用にWindows環境を作成し、
      そこでは簡単に設定できるため、メモとして本件を残しておきます。

      1.Windows版PostgreSQL 11のインストール
       EDBのダウンロードサイトからPostgreSQL Version 11.1 (Windows x86-64)をダウンロードします。
       exe形式のインストーラになっているので、そのままインストールします。気にする部分はロケールはCというところでしょうか。

      2.PostGISのインストール

       実は1.のインストールの延長で追加機能をインストールできます。そこでPostGISを追加してください。現在はPostGIS 2.5がインストールされます。

      3.PostGISの有効化
       SQL SHELL(psql)で以下のコマンドを実行します。元ネタはここ

      七つのEXTENSIONがあります。必要なものだけ入れればいいのですが、また開発環境なので、全部入れちゃいました :)

      -- Enable PostGIS (includes raster)
      CREATE EXTENSION postgis;
      -- Enable Topology
      CREATE EXTENSION postgis_topology;
      -- Enable PostGIS Advanced 3D
      -- and other geoprocessing algorithms
      -- sfcgal not available with all distributions
      CREATE EXTENSION postgis_sfcgal;
      -- fuzzy matching needed for Tiger
      CREATE EXTENSION fuzzystrmatch;
      -- rule based standardizer
      CREATE EXTENSION address_standardizer;
      -- example rule data set
      CREATE EXTENSION address_standardizer_data_us;
      -- Enable US Tiger Geocoder
      CREATE EXTENSION postgis_tiger_geocoder;

      4.お試し

       元ネタのページにあるようにこんなDDL, DMLが打てるようになります。

      -- Create table with spatial column
      CREATE TABLE mytable (
      id SERIAL PRIMARY KEY,
      geom GEOMETRY(Point, 26910),
      name VARCHAR(128)
      );

      -- Add a spatial index
      CREATE INDEX mytable_gix
      ON mytable
      USING GIST (geom);

      -- Add a point
      INSERT INTO mytable (geom) VALUES (
      ST_GeomFromText('POINT(0 0)', 26910)
      );

      -- Query for nearby points
      SELECT id, name
      FROM mytable
      WHERE ST_DWithin(
      geom,
      ST_GeomFromText('POINT(0 0)', 26910),
      1000
      );

      5.そのあと
       こういうのをごにょごにょすると楽しそう。また書籍も(英語版なら)いくつか出てます!

      PostGIS(地理情報システムを実現するための拡張モジュール)



      PostGIS データの格納と表示(Let's Postgres)



      6.ちなみにMySQLは

       5.7以降本体に取り込まれていますので、どのようなパッケージでも、インストールすれば使えます。

      明日は@sakaikさんにバトンが戻ります。

      JUGEMテーマ:コンピュータ



      | meijik | PostgreSQL | 02:27 | comments(0) | trackbacks(0) | - | - |
      [勝手に更新] PostgreSQLの分析関数の衝撃2018(前編)
      0
        [勝手に更新] PostgreSQLの分析関数の衝撃2018(前編)

        本エントリはPostgreSQL Advent Calendarの二日目のエントリです。
        (昨日のエントリはながやすさんでした。こちらをご参照ください)

        PostgreSQLはオープンソースRDBMSの中ではWindow関数の実装がはやく、
        2009年7月に正式リリースされたPostgreSQL 8.4で初期実装されました。
        もう、9年半も前なんですよね。

        その直後にOracle界隈では有名人の山岸さんが以下の一連の記事を公開したので、
        これでWindow関数を知った、勉強した、使ってみた、という方は多かったのではないでしょうか。

        PostgreSQLの最新版は皆さんご存知のPostgreSQL 11 !ということで、
        今一度記事を見直して、最新版に勝手に更新しようというのが、本エントリの趣旨でございます。
        以下のエントリがありますが、とりあえず1.2.のみ前編として公開でお願いしますm(_ _)m

        1.PostgreSQLの分析関数の衝撃1 (モードとメジアン)
        2.PostgreSQLの分析関数の衝撃2 (Lag関数と累計と移動累計)
        3.PostgreSQLの分析関数の衝撃3 (数列を扱うSQLとrange指定)
        4.PostgreSQLの分析関数の衝撃4 (集合の一致と全称肯定命題)
        5.PostgreSQLの分析関数の衝撃5 (Row_Number関数の応用例)
        6.PostgreSQLの分析関数の衝撃6 (window関数の応用例)
        7.PostgreSQLの分析関数の衝撃(7) ――window関数の変わった使用例
        8.PostgreSQLの分析関数の衝撃(8) ――RowsとRangeの代用

        1.PostgreSQLの分析関数の衝撃1 (モードとメジアン)

        PostgreSQL 9.4からそれぞれ専用の関数が用意されたので、それを使うと簡単にもとまります。

        mode()

        postgres=# SELECT mode() WITHIN GROUP (ORDER BY income) FROM Graduates;
        mode
        -------
        10000
        (1 行)

        median()....は無いので、percentile_cont()を使います。

        postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY income) FROM Graduates;
        percentile_cont
        -----------------
        17500
        (1 行)

        注意すべきはモード(最頻値)が複数ある場合です。
        山岸さんの例はちょうど最頻値が二つあるため、記載してある方法や、プログラマのためのSQL「31.SQLにおける記述統計」にある方法でやると、以下の値が戻ります。

        income
        --------
        10000
        20000
        (2 行)

        PostgreSQL 9.4で実装されたmode()や、PostgreSQL wikiで紹介されている方法ではモード(最頻値)が
        ひとつしかない場合しか、正しい値は出力されず、複数ある場合は一番小さな値(incomeでORDER BYしているため)
        戻りません。ご注意ください。

        2.PostgreSQLの分析関数の衝撃2 (Lag関数と累計と移動累計)


        「PostgreSQL8.4では文法エラー」と紹介された以下のクエリですが、PostgreSQL 11でも同様にエラーがでます。

        postgres=# select name,address
        postgres-# from (select name,address,
        postgres(# count(distinct address) over(partition by address)
        postgres(# as distinctAddressCount
        postgres(# from Addresses) a
        postgres-# where distinctAddressCount > 1;
        ERROR: DISTINCT is not implemented for window functions
        行 3: count(distinct address) over(partition by address)

        「PostgreSQL8.4では文法エラー」と紹介された、もうひとつのクエリはPostgreSQL 11では正しく動作します。

        postgres=# select prc_date,prc_amt,
        postgres-# case when count(*) over(order by prc_date) >= 3
        postgres-# then sum(prc_amt) over(order by prc_date rows 2 Preceding)
        postgres-# end as mvg_sum
        postgres-# from Accounts;
        prc_date | prc_amt | mvg_sum
        ------------+---------+---------
        2006-10-26 | 12000 |
        2006-10-28 | 2500 |
        2006-10-31 | -15000 | -500
        2006-11-03 | 34000 | 21500
        2006-11-04 | -5000 | 14000
        2006-11-06 | 7200 | 36200
        2006-11-11 | 11000 | 13200
        (7 行)

        地味に毎年改善されるのがPostgreSQLのよいところです。
        3.以降はまた、時間がとれたときに続きをします。

        明日はPostgreSQL界のおとこまえ、きだくんです。

        JUGEMテーマ:コンピュータ



        | meijik | PostgreSQL | 00:02 | comments(0) | trackbacks(0) | - | - |
        PostgreSQLでカジュアルに再帰クエリ実行with共通表式(CTE:Common Table Expression)
        0
          本エントリはPostgreSQL Advent Calendar 2017の10日目です。

          PostgreSQLでカジュアルに再帰クエリ実行with共通表式(CTE:Common Table Expression)

          PostgreSQLでは8.4から再帰クエリ(WITH RECURSIVE)に対応しています。

          1.基本編(WITH RECURSIVE ... SELECT)
          ここ十年くらい使っている以下のサンプルで試してみます。

          階層構造を隣接リストで表現(slideshare)

          なぜ十年くらい使っているかというと、Firebirdでは丁度そのころ2.1でCTE実装したからです。

          Firebird 2.1の新機能(3) 共通表式(CTE: Common Table Expression), 再帰問い合わせ(キムラデービーブログ)

          CREATE TABLE shain(empid INT PRIMARY KEY, name VARCHAR(20), mgrid INTEGER);
          INSERT INTO shain VALUES ( 1, 'みやはら', NULL);
          INSERT INTO shain VALUES ( 2, 'きむら', 1);
          INSERT INTO shain VALUES ( 3, 'かまたき', 1);
          INSERT INTO shain VALUES ( 4, '加藤', 2);
          INSERT INTO shain VALUES ( 5, '林', 2);
          INSERT INTO shain VALUES ( 6, '三浦', 5);

          WITH RECURSIVE n AS
          (
          SELECT empid, name FROM shain WHERE name = 'きむら'
          UNION ALL
          SELECT nnext.empid, nnext.name FROM shain as nnext, n WHERE n.empid= nnext.mgrid
          )
          SELECT * FROM n;

          empid | name
          -------+--------
          2 | きむら
          4 | 加藤
          5 | 林
          6 | 三浦
          (4 rows)

          無事出力できました。環境は以下のブログ記事を参考に、真ん中あたりをざっくりとばして、各種文字を9.x -> 10に変更して、PostgreSQL 10.1 on CentOS 7.4にて確認しました。

          CentOS7にPostgreSQLを導入&初期設定をおこなう (vdeep)


          2.応用編(WITH RECURSIVE ... (UPDATE|DELETE))
          SQL標準ではSELECTだけですが、PostgreSQLは9.1から更新も可能になっています。
          Microsoft SQL Serverは2005から, MySQL 8.0も対応予定です。

          きむらの部下、林さんと林さんの部下を、かまたきさんの部下にすげかえましょう!
          ....ってあれ、これは再帰クエリは不要ですね。。。。

          UPDATE shain SET mgrid = (SELECT empid FROM shain WHERE name='かまたき') WHERE name = '林';

          気をとりなおして。。。

          例えば、表にタイムスタンプ列を追加して、

          postgres=# alter table shain add column ts timestamp default current_timestamp;

          指定した階層以下の人を更新する、とかに使えます。

          WITH RECURSIVE n AS
          (
          SELECT empid, name FROM shain WHERE name = 'かまたき'
          UNION ALL
          SELECT nnext.empid, nnext.name FROM shain as nnext, n WHERE n.empid= nnext.mgrid
          )
          UPDATE shain SET ts = CURRENT_TIMESTAMP WHERE empid IN (SELECT empid FROM n);

          もしくは

          WITH RECURSIVE n AS
          (
          SELECT empid, name FROM shain WHERE name = 'かまたき'
          UNION ALL
          SELECT nnext.empid, nnext.name FROM shain as nnext, n WHERE n.empid= nnext.mgrid
          )
          UPDATE shain AS t SET ts = CURRENT_TIMESTAMP FROM n WHERE t.empid = n.empid;

          postgres=# select * from shain;
          empid | name | mgrid | ts
          -------+----------+-------+----------------------------
          1 | みやはら | | 2017-12-10 01:26:50.533647
          2 | きむら | 1 | 2017-12-10 01:26:50.533647
          4 | 加藤 | 2 | 2017-12-10 01:26:50.533647
          3 | かまたき | 1 | 2017-12-10 07:30:56.803044
          5 | 林 | 3 | 2017-12-10 07:30:56.803044
          6 | 三浦 | 5 | 2017-12-10 07:30:56.803044
          (6 rows)

          当然これらをDELETEに適用すると、指定した階層以下の人を削除することができます。

          WITH RECURSIVE n AS
          (
          SELECT empid, name FROM shain WHERE name = 'かまたき'
          UNION ALL
          SELECT nnext.empid, nnext.name FROM shain as nnext, n WHERE n.empid= nnext.mgrid
          )
          DELETE FROM shain WHERE empid IN (SELECT empid FROM n);

          postgres=# select * from shain;
          empid | name | mgrid | ts
          -------+----------+-------+----------------------------
          1 | みやはら | | 2017-12-10 01:26:50.533647
          2 | きむら | 1 | 2017-12-10 01:26:50.533647
          4 | 加藤 | 2 | 2017-12-10 01:26:50.533647
          (3 rows)

          PostgreSQLはWITH RECURSIVE ... INSERTも対応していますが、それはまた別の機会に。

          明日はcuzicさんです。

          JUGEMテーマ:コンピュータ



          | meijik | PostgreSQL | 07:48 | comments(0) | trackbacks(0) | - | - |
          PostgreSQL9.6以降同期レプリケーションは名前どおりのモード(synchronous_commit=remote_apply)あり!@PGECons勉強会 #1
          0
            OSSDBの世界を漂う木村明治です。

            PostgreSQLエンタープライズ・コンソーシアム(PGECons)が初めての勉強会をする、というので参加してきました!

            PGECons勉強会 #1明日から使えるPostgreSQLレプリケーション

            短時間でいろいろな知見が得られてThanksモニカ、というところですが、
            特に以前以下のブログでdisり気味にとりあげたものを本エントリでアップデートします。

            PostgreSQL9.1の同期レプリケーションはMySQL5.5でいうところの準同期レプリケーション相当ですよ(キムラデービーブログ)

            以下の図は上記勉強会の資料からの引用(p.37)です。(資料自体は上記connpassから辿れます)



            PostgreSQL 9.6以降、synchronous_commitにremote_applyが設定できるようになり、
            これは、まさにユーザが「同期レプリケーション」と聞いて想像するものと一致するようになりました。この図の(1)-(5)までで、MySQLに相当するものは大まかにいうと、

            (1) マスターでsync_binlog=0
            (2) マスターでsync_binlog=1
            (3) 該当なし
            (4) 準同期レプリケーション
            (5) 該当なし

            気になるのはパフォーマンスですけど、とりあえずPGEConで検証した結果は資料を見てみてください!!

            JUGEMテーマ:コンピュータ

            | meijik | PostgreSQL | 23:42 | comments(0) | trackbacks(0) | - | - |
            使い慣れたSQLに潜む実装依存(PostgreSQLの場合)とSQL標準の参照方法
            0
              使い慣れたSQLに潜む実装依存(PostgreSQLの場合)とSQL標準の参照方法

              本ブログエントリはPostgreSQL Advent Calendar 2016の20日目です。

              Firebirdの場合、はこの記事をはじめとしてAdvent Calendarで11回にわたり解説したので、PostgreSQLについては
              それをコンパクトに一回でまとめます :)

              PostgreSQLの場合、他のRDBMSやSQL標準と比較して違った動作は以下のところです。

              (1) GREATEST(1,2,NULL)で、NULLではなく2を返す
              (2) CURRENT_TIMESTAMPで、ステートメントの開始時刻(==現在時刻)ではなく、トランザクション開始時刻を返す
              (3) SELLECT NULL || 'ABC'はNULLを返すのに(SQL標準ぽい動作), SELECT CONCAT(NULL, 'ABC')は'ABCを返す(Oracleぽい動作)
              (4) UPDATE文による主キー値の入れ替えで、エラー(SQL標準っぽくない動作), DEFERRABLE指定で回避できる。

              (2) について、ステートメントの開始時刻を得るにはstatement_timestamp()、関数が評価された時間を得るには
              clock_timestamp()を利用します(OracleやMySQLでいうところのsysdate)。
              transaction_timestamp()とnow()はPostgreSQLのcurrent_timestamp, つまりトランザクション開始時の日付時刻の別名です。

              PostgreSQLはかなりSQL標準を意識したつくりになっているので、上記のように違和感を感じる動作は少ないです。

              さて、他のRDBMSとの比較、は比較的簡単にできますが、SQL標準はこれまで参照するのはなかなか難しい状態でした。基本的に規格書は有料で、ひとつのパートについて数万円くらいしたからです。(私は以前Club DB2でストアドやトリガーの話をするために規格書の一部分を購入しましたが、値段がそのくらいしました)

              現状ではISOをベースとしたJISの規格書(X3005, X3006)がオンラインの閲覧は無料でできるようになっているので、ぜひ参照してみてください。ただ私の環境ではWindowsでIEを使って閲覧しないとうまく閲覧できませんでした。
              以下は「日本工業標準調査会ウェブサイト」へのリンクです。

              JISX3005-1
              JISX3005-2
              JISX3005-13
              JISX3005-14
              JISX3006-1

              これらのなりたちと原規格書との対応・相違は以下のpdfに詳しいです。

              データベース言語(SQL)に関するJIS原案作成委員会 成果報告書

              JUGEMテーマ:コンピュータ



              | meijik | PostgreSQL | 23:18 | comments(0) | trackbacks(0) | - | - |
              あなたのPostgreSQLが返す乱数は、開いているか、閉じているか。
              0
                以前、次のようなエントリを作成しました。

                あなたのDBが返す乱数は、開いているか、閉じているか。

                このとき(2009年) PostgreSQLについては、以下のように記述したんですが。。。

                o [0,1] つまり0から1の値を返す
                →Firebird, PostgreSQL, IBM DB2

                最新のPostgreSQLをみると[0,1)になってる!!

                日本語マニュアルでは8.4から[0,1)になっているみたいですが、ソースコード(¥src¥backend¥utils¥adt¥float.c)を追っかけていくとどうやら8.2.0から[0,1)になっているみたいです。

                # 8.1.26まで
                /* result 0.0-1.0 */
                result = ((double) random()) / ((double) MAX_RANDOM_VALUE);

                # 8.2.0から
                /* result [0.0 - 1.0) */
                result = (double) random() / ((double) MAX_RANDOM_VALUE + 1);

                んで、英語マニュアルをみるとしれっと8.2からそうなってますね。。。

                ちゅうことで、PostgreSQL 8.1までは[0,1], 8.2以降は[0,1)ということで w (元記事もそのうち更新します)
                しかし日曜日のあけがたから何をやってるんだ。。。オレ

                JUGEMテーマ:コンピュータ


                | meijik | PostgreSQL | 05:30 | comments(0) | trackbacks(0) | - | - |
                秘密エキス
                0
                  DSC_0839.JPG
                  数年前に「次でてみますよ」といっていたPostgreSQLのしくみ分科会、やっとでれました。

                  第23回しくみ+アプリケーション 勉強会(2012年5月26日)

                  内容はPacemaker, PHPでのSQLインジェクション対策, PostgreSQL9.2新機能と盛りだくさんでした。
                  以下のリンクをご参照ください♪

                  LINUX-HA JAPAN


                  PHPでのSQLインジェクション対策 - エスケープ・クォート編


                  PHPでのSQLインジェクション対策 - プレースホルダ編

                  PostgreSQL 9.2 Beta 1公開、性能向上とJSONサポートなど

                  懇親会はやすいうえに、飲み放題の日本酒が半端なくいい、またいきたいっすね。
                  | meijik | PostgreSQL | 22:33 | comments(0) | trackbacks(0) | - | - |
                  PostgreSQLの次期版9.1の機能紹介
                  0
                    JUGEMテーマ:コンピュータ


                    といっても、他人の便乗エントリなのですが(笑)板垣さんThanks!

                    PostgreSQL 9.1 の新機能(Let's postgres)

                    まぁいろいろありますが、SQL文の拡張部分を重点的に。

                    文字列関数 concat()が追加されます。複数引数を指定できるのはMySQL風なのですが、なぜかNULLは
                    空文字として扱われますので、||とは違う感じになってしまいます。通常引数のうちにNULLが混じれば
                    結果はNULLになるのが常。以下はPostgreSQL 9.0の実行結果。

                    postgres=# select 'ABC' || NULL || 123;
                    ?column?
                    ----------

                    (1 行)

                    Oracleの仕様(VARCHAR2で''とNULLは同一視)にあわせたのでしょうかね? PostgreSQLの人は混乱しないんでしょうか?
                    MySQLでは当然NULLになってしまうので、これを防ぐにはIFNULLかCOALESCEを使います。

                    mysql> SELECT concat('ABC', NULL, 123);
                    +--------------------------+
                    | concat('ABC', NULL, 123) |
                    +--------------------------+
                    | NULL |
                    +--------------------------+
                    1 row in set (0.02 sec)

                    mysql> SELECT concat('ABC', IFNULL(NULL,''), 123);
                    +-------------------------------------+
                    | concat('ABC', IFNULL(NULL,''), 123) |
                    +-------------------------------------+
                    | ABC123 |
                    +-------------------------------------+
                    1 row in set (0.07 sec)

                    mysql> SELECT concat('ABC', COALESCE(NULL,''), 123);
                    +---------------------------------------+
                    | concat('ABC', COALESCE(NULL,''), 123) |
                    +---------------------------------------+
                    | ABC123 |
                    +---------------------------------------+
                    1 row in set (0.04 sec)

                    「GROUP BY が MySQL 風に緩めに」とか「CREATE TABLE IF NOT EXISTSのサポート」は明らかにMySQLへの歩み寄りですね。まぁ便利ですから(^_^;)

                    ちなみにMERGEは本バージョンでもまだサポートの話がでませんね。。。。SQL標準への準拠度が高いPostgreSQLとしては珍しい。。。。
                    | meijik | PostgreSQL | 05:00 | comments(0) | trackbacks(0) | - | - |
                    PostgreSQLのパーティショニング、利点と制限(欠点)
                    0
                      [医療] 先進事例紹介セミナー
                      〜 MySQLで大量データを高速処理: 在庫管理の効率化と大幅なTCO削減を実現 〜


                      昨日は久しぶりに公の場でお話をさせていただきました。メディカルデータビジョン殿、スマートスタイル殿、いろいろと貴重なお話ありがとうございました。

                      今回セミナー終了後に、いろいろな問い合わせを受けたのですが、その中の一つに「MySQLではパーティショニングでSELECT ... FOR UPDATEを使えますか」というものがありました。当然使えるわけですが、なぜそのようなことを聞かれるのかと理由を尋ねると、PostgreSQLではできないとのこと。探してみると以下のような記事を見つけました。

                      パーティショニング : 用途と利点(Let's postgres 板垣さん)

                      [2010-03-15 追記]
                      8.4では親テーブルへのSELECT FOR UPDATEが可能になったとのことです。(Thanks ゆーすけさん)

                      元々PostgreSQLでのパーティショニングは、専用の機能を実装したというよりは、テーブルの継承(もともと(というか今も)ORDBMSなのです)とCHECK句など、既存の機能をうまく利用して実装しています。そのため、利点とともに制限(欠点も)多く存在します。

                      詳細は上記の板垣さんの記事をご参照ください。

                      とはいえ、用途が合致すれば便利ですし、少しずつ改善もされつつあります。現在の最新安定版でもパーティショニングに関わる機能が改善されています。詳細は、次の板垣さんの記事をご参照ください。

                      PostgreSQL 8.4 の新機能(Let's postgres 板垣さん)
                      | meijik | PostgreSQL | 07:35 | comments(1) | trackbacks(0) | - | - |
                        12345
                      6789101112
                      13141516171819
                      20212223242526
                      27282930   
                      << September 2020 >>
                      + RECOMMEND
                      100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
                      100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

                      100人のうちの一人としてミックさんの本を推薦しています。
                      + RECOMMEND
                      MySQL 5.1 Plugin Development
                      MySQL 5.1 Plugin Development (JUGEMレビュー »)
                      Andrew Hutchings,Sergei Golubchik
                      MySQL 5.1 のプラグインを作るならこれ!
                      + RECOMMEND
                      AWKを256倍使うための本 (Ascii 256倍)
                      AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
                      志村 拓,鷲北 賢,西村 克信
                      ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
                      + RECOMMEND
                      Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
                      Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
                      松信 嘉範
                      Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
                      + RECOMMEND
                      + RECOMMEND
                      超・極める!MySQL
                      超・極める!MySQL (JUGEMレビュー »)
                      坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
                      内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
                      + RECOMMEND
                      The Root of .NET Framework
                      The Root of .NET Framework (JUGEMレビュー »)
                      荒井 省三
                      .NETの根っこをつかむ、か?
                      + RECOMMEND
                      エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
                      エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
                      奥野 幹也
                      これまでにない構築、そして構築後のMySQLのための本。
                      + RECOMMEND
                      Database Management Systems
                      Database Management Systems (JUGEMレビュー »)
                      Raghu Ramakrishnan,Johannes Gehrke
                      ミックさん連載の参考書籍です。
                      + RECOMMEND
                      Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
                      Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
                      W. Richard Stevens,Stephen A. Rago
                      必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
                      + RECOMMEND
                      + RECOMMEND
                      + RECOMMEND
                      Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
                      Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

                      DELL SX260の換装用に購入。今はコチラのほうが安いですね。
                      + RECOMMEND
                      情熱プログラマー ソフトウェア開発者の幸せな生き方
                      情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
                      Chad Fowler
                      OSC2010神戸に出展されたジュンク堂で買いました。
                      + RECOMMEND
                      Software Design 総集編 【2000~2009】(DVD付)
                      Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

                      メガトン級の過去記事。売り切れる前にお店に急げ!
                      + RECOMMEND
                      + RECOMMEND
                      玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
                      玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

                      Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
                      + RECOMMEND
                      + RECOMMEND
                      acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
                      acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

                      色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
                      + RECOMMEND
                      Firebird 徹底入門
                      Firebird 徹底入門 (JUGEMレビュー »)
                      木村 明治,はやし つとむ,坂井 恵
                      Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
                      + SELECTED ENTRIES
                      + RECENT COMMENTS
                      • MySQL ProとMySQL Expertを立ち読みする+α
                        MEIJI KIMURA (09/14)
                      • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
                        meijik (11/20)
                      • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
                        meijik (07/27)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        meijik (03/03)
                      • 2019年の木村明治
                        田中尚 (01/08)
                      • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
                        noname (12/10)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        Moriaki_ (01/05)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        Moriaki_ (01/05)
                      • 2015年版 InterBaseの歩み
                        nakagami (12/06)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        meijik (11/22)
                      + RECENT TRACKBACK
                      + CATEGORIES
                      + ARCHIVES
                      + MOBILE
                      qrcode
                      + LINKS
                      + PROFILE