PostgreSQL 7.3 に関する技術情報

このリリースは PostgreSQL 7.3 (2002/11/27リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。

PostgreSQL 7.2.3 から 7.3 への変更点

注意: ここにあげた変更点は、すべてを網羅していない可能性があります。詳しくはソースに付属の HISTORY というファイルを見てください。

互換性のない変更点


  • データベースのフォーマットが変わったので、7.2.x またはそれ以前で作成したデータベースは使えません。
    pg_dumpCOPY コマンドを使って、以前のデータベースをダンプし、7.3 でロードする必要があります。


    また、オブジェクト間の依存関係の処理の変更により、7.3 より前のデータベースのデータをロードすると、SERIAL、ユニーク制約、外部キーについての、依存関係情報が作成されません。リリースソースの
    contrib/adddepend
    に、これらの依存関係を追加するスクリプトと詳しい説明があります。


  • フロントエンド/バックエンドの通信プロトコルについては、6.3 より前のバージョンのクライアントがサポートされなくなりました。


  • 7.3 では、4 つのシステムテーブルと 2 つのシステムビューの追加、ネームスペースの追加などの理由により、
    殆どのテーブルとビューに、フィールドの削除や追加などの修正がなされています。7.3 のシステムカタログの詳細は、PostgreSQL のドキュメントの

    Chapter 3. System Catalogs
    にあります。システムカタログを参照しているアプリケーションについては、

    ポーティングガイド
    にヒントがまとめられています。



    • 追加されたシステムテーブルは以下の通りです。























      pg_namespace ネームスペース情報
      pg_cast キャストのデータタイプ変換情報
      pg_constraint 制約情報
      pg_conversion エンコーディング変換情報
      pg_depend オブジェクト依存関係情報


    • 追加されたシステムビューは以下の通りです。










      pg_locks ロック状況表示
      pg_settings GUC 設定の表示と変更


    • 変更されたシステムテーブルは以下の通りです。































































































      pg_aggregate フィールドの削除と追加、インデックスの追加、NOT NULL 制約の追加
      pg_am NOT NULL 制約の追加
      pg_amop 同上
      pg_amproc 同上
      pg_attrdef 同上
      pg_attribute フィールドの追加、NOT NULL 制約の追加
      pg_class フィールドの削除と追加、インデックスの変更、NOT NULL 制約の追加
      pg_database フィールドの追加、NOT NULL 制約の追加
      pg_description NOT NULL 制約の追加
      pg_group インデックスの変更、NOT NULL 制約の追加
      pg_index NOT NULL 制約の追加
      pg_inherits 同上
      pg_language フィールドの追加、NOT NULL 制約の追加
      pg_largeobject NOT NULL 制約の追加
      pg_listener 同上
      pg_opclass フィールドの追加、インデックスの変更、NOT NULL 制約の追加
      pg_operator フィールドの削除と追加、インデックスの変更、NOT NULL 制約の追加
      pg_proc 同上
      pg_rewrite NOT NULL 制約の追加
      pg_shadow フィールドの削除と追加、NOT NULL 制約の追加
      pg_statistic NOT NULL 制約の追加
      pg_trigger インデックスの変更、NOT NULL 制約の追加
      pg_type フィールドの削除と追加、インデックスの変更、NOT NULL 制約の追加


    • 変更されたシステムビューは以下の通りです。























































































      pg_indexes フィールドの追加
      pg_rules 同上
      pg_stat_all_indexes 同上
      pg_stat_all_tables 同上
      pg_stat_sys_indexes 同上
      pg_stat_sys_tables 同上
      pg_stat_user_indexes 同上
      pg_stat_user_tables 同上
      pg_statio_all_indexes 同上
      pg_statio_all_sequences 同上
      pg_statio_all_tables 同上
      pg_statio_sys_indexes 同上
      pg_statio_sys_sequences 同上
      pg_statio_sys_tables 同上
      pg_statio_user_indexes 同上
      pg_statio_user_sequences 同上
      pg_statio_user_tables 同上
      pg_stats 同上
      pg_tables 同上
      pg_user 同上
      pg_views 同上


    • 削除されたシステムテーブルは以下の通りです。



      • pg_relcheck


    • 変更のないシステムビューは以下の通りです。



      • pg_stat_activity
      • pg_stat_database


    • TOAST テーブルのインデックスのサフィックスが _idx から _index に変更されました。


  • ODBC、Perl、pgeasy、libpq++ の標準インターフェースライブラリが GBorg
    psqlODBC – The PostgreSQL ODBC Driver
    The pgperl Project
    The pgeasy Project
    The libpqpp Project、に移りました。
    今後、これらのライブラリは、PostgreSQL のリリースとは独立に、GBorg で開発が続けられます。


  • 関数のパラメータ数が 16 から 32 になり、識別子の最大長が 31 バイトから 63 バイトになりました。


  • インストール時のマルチバイトサポートがデフォルトで有効になりました。ロケールサポートも有効になったため、7.2 と同じように日本語を使えるようにデータベースクラスタを作成するには、以下のようにする必要があります。

    $ initdb –encoding=EUC_JP –no-locale

    EUC_JP 以外のエンコーディングのなどの詳細は、リリースソース中の
    doc/README.mb.jp に説明があります。

  • 関数と手続言語に権限の設定が追加されました。デフォルトでは、関数の作成者のみが実行権を持ちます。詳細は、PostgreSQL のドキュメントの
    4.4. Privilegesにあります。


  • pg_hba.conf
    pg_hba.conf の詳細は、PostgreSQL のドキュメントの 6.1. The pg_hba.conf file にあります。


    • セカンダリパスワードが廃止されました。
    • USER カラムが追加されました。
    • データベースとユーザをカンマ区切りで列挙できるようになりました。また、+グループ名でグループを、@ファイル名でデータベース名またはユーザ名を記述したファイルを指定できるようになりました。
    • キーワードsamegroupが追加されました。


  • テーブル値コンストラクタのすべての値を行値コンストラクタで指定しなければならなくなりました。つまり、INSERT INTO tab (col1, col2) VALUES (‘val1’) は、エラーとなります。INSERT INTO tab (col1, col2) VALUES (‘val1’, NULL) としてください。

  • COPY でのカラム省略で NULL が仮定されなくなりました。

  • LIMIT #,# が廃止されました。LIMIT # OFFSET # を使ってください。

  • SERIAL で自動的にインデックスが作成されなくなりました。

  • トランザクション内の SET 操作は、トランザクションがアボートするとロールバックされるようになりました。

  • TIMESTAMP 型と TIME 型は、デフォルトで WITHOUT TIMEZONE となりました。

  • SQL 標準のドメインの実装の影響によって、0::bool や 1::interval はエラーとなってしまうようになりました。‘0’::bool、’1′::interval として回避してください。

  • 整数型の読み込みで、空文字列が禁止されました。この結果、整数型フィールドに対し、COPY 文での入力フィールドの空指定や VALUES 句での空文字列 指定などで、0 入力とはならず、エラーとなります。

追加された機能


  • SQL 標準のスキーマがサポートされ、ユーザ毎にネームスペースを持てるようになりました。スキーマの詳細は、PostgreSQL のドキュメントの 2.8. Schemas にあります。

  • SQL 標準のドメインについて、CREATE DOMAINDROP DOMAIN がサポートされました。ALTER DOMAIN は、未サポートです。ドメインの詳細は、PostgreSQL のドキュメントの CREATE DOMAIN DROP DOMAIN にあります。

  • 複数の行と列を返す関数が簡単に使用できるようになりました。詳細は、PostgreSQL のドキュメントの
    9.7. Table Functions にあります。

  • プリペアドクエリーがサポートされました。
    詳細は、PostgreSQL のドキュメントの PREPARE
    EXECUTE DEALLOCATEにあります。また、リリースソースの
    src/test/regress/sql/prepare.sql に使用例があります。

  • オブジェクト間の依存関係を pg_depend テーブルに保存することにより、依存関係のあるオブジェクトの処理が改善されました。PostgreSQL のドキュメントの 2.10. Dependency Trackingに説明があります。


    この改善により、DROP コマンドで、CASCADERESTRICT を指定して依存関係のあるオブジェクトの削除ができるようになっています。

  • pg_locks ビューで、ロック状況を参照できるようになりました。

    postgres=# select * from pg_locks ;
    relation | database | transaction | pid | mode | granted
    ———-+———-+————-+——-+—————–+———
    1259 | 16976 | | 12020 | AccessShareLock | t
    16757 | 16976 | | 12027 | AccessShareLock | t
    | | 666 | 12020 | ExclusiveLock | t
    16977 | 16976 | | 12020 | AccessShareLock | t
    16977 | 16976 | | 12020 | RowShareLock | t
    | | 685 | 12027 | ExclusiveLock | t
    (6 rows)

  • GUC パラメータの追加/変更/削除


    GUC の詳細は、PostgreSQL のドキュメントの 3.4. Run-time Configuration にあります。

    • パラメータ名の変更

      • debug_print_querylog_statement に変更されました。
      • debug_levelserver_min_message に変更されました。
      • show_query_statsshow_statement_stats に変更されました。

    • 削除されたパラメータ。

      • ksqoKSQO (Key Set Query Optimizer) は、7.1 以後無効となっていため削除されました。
      • wal_files。WAL ファイルが再利用されるようになったため不要となりました。

    • 追加されたパラメータ。

      • autocommit。オートコミットのオン/オフ。デフォルトは on です。on の場合には、トランザクションの開始と終了は、今まで通りです。off の場合には、BEGINSTART TRANSACTION がない場合に、自動的にトランザクションが開始されます。
      • client_min_messages。クライアントへのメッセージのレベル。デフォルトは NOTICE です。
      • db_user_namespaceusername@dbname 形式のユーザ名。デフォルトは off です。実験的な実装で、廃止される可能性があります。
      • default_statistics_target。デフォルトの統計情報分割数。デフォルトは 10 です。
      • explain_pretty_printEXPLAIN VERBOSE 結果の清書表示。デフォルトは on です。
      • LC_MESSAGESLC_MESSAGES ロケール。
      • LC_MONETARYLC_MONETARY ロケール。
      • LC_NUMERICLC_NUMERIC ロケール。
      • LC_TIMELC_TIME ロケール。
      • log_duration。クエリー実行時間のログ。デフォルトは false です。
      • log_min_error_statement。サーバログのレベル。デフォルトは NOTICE です。
      • search_path。ネームスペースサーチパス。デフォルトは ‘$user,public’ です。
      • statement_timeout。ミリ秒単位のクエリー実行のタイムアウト。クエリー発行後、指定した時間経過しても結果が返らない場合に、クエリーがキャンセルされます。デフォルトは 0 で、タイムアウトしません。
      • superuser_reserved_connections。スーパーユーザ用の予約コネクション。デフォルトは 2 です。

  • PL/pgSQL 関係

    • 複数の行を返すことができるようになりました。
    • クォートした識別子を扱えるようになりました。
    • PERFORMFOUND がセットされるようになりました。

  • 認証

    • KTH (KUNGL TEKNISKA HOGSKOLAN) の Heimdal (Kerberos5 国際化版)がサポートされました。
    • ホームディレクトリの .pgpass に、データベースホストとユーザパスワードが記述できるようになりました。環境変数 PGPASSWORD ではなく、.pgpass を使用するようにしてください。

  • 権限
    • CREATE DATABASEOWNER オプションが追加されました。データベース作成権限のないユーザ用のデータベースをスーパーユーザで次のようにして作成できます。

      =# CREATE DATABASE www WITH OWNER = www;
      CREATE DATABASE
      =#

      また、以下のように = 指定がオプションとなり、WITH 句で重複オプションがエラーとなるように変更されました。

      CREATE DATABASE name
      [ WITH [ OWNER [=] dbowner ]
      [ LOCATION [=] ‘dbpath’ ]
      [ TEMPLATE [=] template ]

    • EXECUTEUSAGE の 2 つのアクセス権が追加されました。
    • 関数がそのオーナの権限で実行されるようになりました。

  • 追加された標準ユーティリティコマンド
    • clusterdb。クラスター化を行ったことのあるテーブルに対して、再クラスター化をします。
    • pg_controldatapg_control ファイルの情報表示。contrib から標準ユーティリティコマンドとなりました。
    • pg_resetxlog。トランザクションログのリセット。contrib から標準ユーティリティコマンドとなりました。

  • 標準ユーティリティコマンド pg_passwd が削除されました。
  • 標準ユーティリティコマンド createdb-O/–owner オプションが追加されました。また、コメントが template1 データベースに登録されていたのがカレントデータベースに登録されるように修正されています。
  • psql
    • copy でカラム指定ができるようになりました。
    • copy コマンドのパラメータ解析でのメモリリークが修正されました。
    • d コマンドで、インデックス情報が詳しく表示されるようになりました。
    • d コマンドで、一時テーブル情報と外部キーが表示されるようになりました。
    • ドメインを表示する dD コマンドが追加されました。
    • iming コマンドが追加され、クライアントから見たクエリーの実行時間が正確に計測できるようになりました。
    • ビューのコンプリーションができるようになりました。また、GRANT DELETE のコンプリーションが FROM となるのが ON に修正されています。
    • 変数置換を使用するとメモリ破壊により不安定になるバグが修正されました。

  • libpq
    • 関数 PQconnectdb() のパラメータに、connect_timeout が追加されました。
    • 関数 PQunescapeBytea() が追加されました。
    • ノンブロッキングコネクションで大きなクエリー文を扱えるようになりました。

  • SQL コマンド
    • CREATE OR REPLACE VIEWCREATE OR REPLACE RULE が追加されました。
    • ALTER TABLE … DROP COLUMN によって、カラムの削除ができるようになりました。
    • ALTER TABLE … DROP CONSTRAINT によって、制約の削除ができるようになりました。現時点では、同じ名前の異なる制約は、すべて削除されてしまうことに注意してください。詳しくは、 ALTER TABLE の DROP CONSTRAINT を参照してください。
    • ALTER TABLE OWNER で、インデックス、TOAST テーブル、TOAST テーブルのインデックスのオーナも変更されるようになりました。
    • ALTER TRIGGER RENAME が追加されました。
    • トランザクション内で、ANALYZE が実行できるようになりました。
    • COPY でカラム指定ができるようになりました。
    • COPY SQL コマンドの WITH 句によるオプション指定が統一的な形式に変更されました。互換性のために旧形式も使用できます。
    • CREATE FUNCTION に、関数の評価方法を指定する属性値 IMMUTABLESTABLE、VOLATILE が追加されました。デフォルトは VOLATILE です。
    • CREATE RULE の複数文記述時の鈎括弧 ([]) が廃止されました。
    • DROP TABLESERIAL カラムのシーケンスが削除されるようになりました。
    • EXPLAIN の結果が NOTIFY でなく、タプルで返るようになりました。
    • EXPLAIN でソートキーとインデックスの条件が表示されるようになりました。
    • INSERT の行値コンストラクタの値に、キーワード DEFAULT を指定することができるようになりました。
    • TOAST テーブルに REINDEX を使用できるようになりました。
    • SETLOCAL オプションが追加され、SET LOCAL var = value とすると、トランザクションローカルな設定ができるようになりました。
    • SHOW の結果が NOTIFY でなく、タプルで返るようになりました。
    • SQL99 の START TRANSACTION が追加されました。
    • 参照整合性制約のある場合にテーブルを TRUNCATE できなくなりました。
    • VACUUM が関数内から呼ぶことができないようになりました。
    • エラーメッセージで、エラーになった識別子と位置の表示が改善されました。
    • ビューからシステムカラムが削除され、ビュー定義時に、テーブルのシステムカラムを指定し、値を持たせることができるようになりました。
    • 外部キーとして使用されているカラムが削除できないようになりました。
    • カラム名とテーブル名の変更が外部キー制約に伝播されるようになりました。

  • データ型、関数、演算子
    • CREATE CASTDROP CAST でユーザ定義キャストが定義できるようになりました。また、CAST() と同義の TREAT() が追加されています。
    • CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USERSESSION_USERUSER での「()」の指定が廃止されました。
    • SIMILAR TO が演算子 ~ の代わりに使えるようになりました。
    • SUBSTRING() のパターンに正規表現が使えるようになりました。
    • 文字列操作関数 overlay()replace()split_part()to_hex()が追加されました。
    • timetz()timezone() に変更されました。
    • 関数 current_database() で、カレントデータベースが返るようになりました。
    • 関数 pg_backend_pid() で、バックエンドのプロセス ID が返るようになりました。
    • 日付と時刻の型の内部表現に、64 ビット整数を使用することができるようになりました。この内部表現を使用するためには、configure 時にオプション –enable-integer-datetimes を指定する必要があります。
    • パラメータ指定のない関数 LOCALTIMELOCALTIMESTAMP が追加されました。
    • ルールとトリガーが名前の辞書順で実行されるようになりました。
    • 型変換関数の命名規則に従っていない、bitfromint4bittoint4 が、それぞれ bitint4 に変更されました。

  • 国際化

    • SQL99 の関数 CONVERT() が追加されました。詳細は、リリースソース中の doc/README.mb.jp にあります。
    • COPY FROMDELIMITER が 8 ビットクリーンになりました。
    • CREATE CONVERSIONDROP CONVERSION により、ユーザ定義のコンバージョンの作成と削除ができるようになりました。詳細は、リリースソース中の doc/README.mb.jp にあります。
    • Korean (JOHAB)、Thai (WIN874)、Vietnamese (TCVN)、Arabic (WIN1256)、Simplified Chinese (GBK)、Korean (UHC)、GB18030 の各エンコーディングが追加されました。

  • タイムゾーンの追加、TZ と DTZ の値の修正、名称の修正がされました。
    * 印は訂正、- 印は削除、無印は追加です。































































































































    AMSTArmenia Summer Time (Yerevan)
    AMTArmenia Time (Yerevan)
    ANASTAnadyr Summer Time (Russia)
    ANATAnadyr Time (Russia)
    ARTArgentina Time
    AZOSTAzores Summer Time
    AZOTAzores Time
    AZSTAzerbaijan Summer Time
    AZTAzerbaijan Time
    BNTBrunei Darussalam Time
    BORTBorneo Time (Indonesia)
    BOTBolivia Time
    BRABrazil Time
    BST*British Summer Time
    BTBaghdad Time
    BTTBhutan Time
    CCTChina Coast Time
    CHADTChatham Island Daylight Time (13:45)
    CHASTChatham Island Time (12:45)
    CKTCook Islands Time
    CLSTChile Summer Time
    CLTChile Time
    COTColumbia Time
    CVTChristmas Island Time (Indian Ocean)
    CXTChristmas Island Time (Indian Ocean)
    DAVTDavis Time (Antarctica)
    DDUTDumont-d’Urville Time (Antarctica)
    EASSTEaster Island Summer Time
    EAST*Easter Island Time
    EATEast Africa Time
    EASTIndian Antananarivo Savings Time
    EATIndian Antananarivo Time
    ECTEastern Caribbean Time
    ECTEcuador Time
    EESTEastern Europe Summer Time
    EETDST*Eastern Europe Daylight Time
    EGSTEast Greenland Summer Time
    EGTEast Greenland Time
    FJSTFiji Summer Time (13 hour offset!)
    FJTFiji Time
    FKSTFalkland Islands Summer Time
    FKTFalkland Islands Time
    GALTGalapagos Time
    GAMTGambier Time
    GESTGeorgia Summer Time
    GETGeorgia Time
    GFTFrench Guiana Time
    GILTGilbert Islands Time
    GYTGuyana Time
    HDT*Hawaii/Alaska Daylight Time
    HMT-Hellas
    HKTHong Kong Time
    ICTIndochina Time
    IRKSTIrkutsk Summer Time
    IRKTIrkutsk Time
    IRTIran Time
    JAVTJava Time (07:00 see JT)
    JAYTJayapura Time (Indonesia)
    JTJava Time (07:30 see JAVT)
    KDTKorea Daylight Time
    KGSTKyrgyzstan Summer Time
    KGTKyrgyzstan Time
    KOSTKosrae Time
    KRASTKrasnoyarsk Summer Time
    KRATKrasnoyarsk Standard Time
    LHDTLord Howe Daylight Time, Australia
    LHSTLord Howe Standard Time, Australia
    LINTLine Islands Time (Kiribati; +14 hours!)
    LKTLanka Time
    MAGSTMagadan Summer Time
    MAGTMagadan Time
    MARTMarquesas Time
    MMTMyannar Time
    MPTNorth Mariana Islands Time
    MSDMoscow Summer Time
    MSKMoscow Time
    MUT*Mauritius Island Time
    MVT*Maldives Island Time
    MYTMalaysia Time
    NCTNew Caledonia Time
    NOVSTNovosibirsk Summer Time
    NOVTNovosibirsk Standard Time
    NUTNiue Time
    OMSSTOmsk Summer Time
    OMSTOmsk Time
    PETPeru Time
    PETSTPetropavlovsk-Kamchatski Summer Time
    PETTPetropavlovsk-Kamchatski Time
    PGTPapua New Guinea Time
    PHOTPhoenix Islands (Kiribati) Time
    PHTPhillipine Time
    PKTPakistan Time
    PMDTPierre & Miquelon Daylight Time
    PONTPonape Time (Micronesia)
    PWTPalau Time
    PYSTParaguay Summer Time
    PYTParaguay Time
    TFiller for ISO time fields
    THATTahiti Time
    TJTTajikistan Time
    TKTTokelau Time
    TMTTurkmenistan Time
    TOTTonga Time
    TRUKTruk Time
    ULASTUlan Bator Summer Time
    ULATUlan Bator Time
    UYSTUruguay Summer Time
    UYTUruguay Time
    UZSTUzbekistan Summer Time
    UZTUzbekistan Time
    VETVenezuela Time
    VLASTVladivostok Summer Time
    VLATVladivostok Time
    VUTVanuata Time
    WAKTWake Time
    WESTWestern Europe Summer Time
    WETDSTWestern Europe Daylight Savings Time
    WFTWallis and Futuna Time
    WGSTWest Greenland Summer Time
    WGTWest Greenland Time
    WSTWest Australian Standard Time
    YAKSTYakutsk Summer Time
    YAKTYakutsk Time
    YAPTYap Time (Micronesia)
    YEKSTYekaterinburg Summer Time
    YEKTYekaterinburg Time

性能向上,改良


  • 更新の多い処理でのインデックスの性能が改良され、速度の低下が改善されました。
  • pg_internal.init にシステムカタログ情報をキャッシュすることにより、バックエンドの起動時間が改善されました。
  • ラージオブジェクトのリストア時の速度が改善されました。
  • NULL 値の持ち方の改良とタプルオーバヘッドの削減によって、タプルサイズが減少しました。
  • 大きなテーブルでのフリースペースマップの処理が改善されました。
  • サーバの DEBUG タグメッセージが LOG タグメッセージに変更されました。
  • アクセス統計情報を関数 pg_stat_reset() によって、稼働中にゼロクリアできるようになりました。
  • 同じ正規表現が続けて用いられる場合が多いを考慮して、正規表現のコンパイル結果のキャッシュをリングバッファに変更し、LRU で検索されるように変更されました。以前は、先頭からキャッシュを検索していました。
  • ダイナミックローディング。
    • FreeBSD の古いバージョンで、dlopenRTLD_GLOBAL 指定が存在しないことへの対処がされました。
    • dlopen の呼び出しの RTLD_LAZY 指定が RTLD_NOW に変更されました。このことにより、名前解決のできない関数が実行されてしまい、バックエンドが落ちることがなくなりました。

  • CREATE TABLE AS で、クエリーが UNION を含む場合に、明示的に指定したカラム名が使用されませんでした。

    =# CREATE TABLE foo (x integer, y integer, z integer);
    CREATE
    =# CREATE TABLE bar (a integer, b integer, c integer);
    CREATE
    =# CREATE TABLE foo_union_bar (s, u, t) AS
    -# SELECT x, y, z FROM foo UNION SELECT a, b, c FROM bar;
    SELECT
    =# SELECT * FROM foo_union_bar;
    x | y | z
    —+—+—
    (0 rows)

    修正後は、以下のように明示的に指定したカラム名が使用されます。

    =# SELECT * FROM foo_union_bar;
    s | u | t
    —+—+—
    (0 rows)

  • ecpg で生成される floatdouble の C コードで、文字列バッファ長が 1 バイト少ないために不安定な動作をしていたのが修正されました。
  • pg_dump
    • OS でラージファイルが使用可能な場合に、pg_dump で 2G を越えるファイルが扱えるようになりました。
    • COPY コマンドの結果が標準出力の場合に、PQexec の結果がメモリリークになっていたのが修正されました。
    • ラージオブジェクトの OID が 20 億を越えた場合に、バックアップとリストアができないバグが修正されました。
    • 未定義タイプのオーナが定まっていない場合に、以下の警告メッセージが表示されないようになりました。

      WARNING: owner of data type %s appears to be invalid