[pgsql-jp: 26384] Re: ビット演算子での配列について

sugita @ sra.co.jp sugita @ sra.co.jp
2002年 6月 15日 (土) 17:21:04 JST


  杉田です。

From: "ono" <ono @ galasp.dnsalias.com>
Subject: [pgsql-jp: 26381] ビット演算子での配列について
Date: Sat, 15 Jun 2002 12:20:16 +0900

;;; 質問1:
;;; ビット演算子の配列を使用したく、
;;; create table tablebit2( tbit2 bit(4)[]);
;;; とし
;;; insert into tablebit2 values({'B'1011',B'1111'}');
;;; を行うと
;;; 
;;; ERROR:  parser: parse error at or near "{"
;;; 
;;; とエラーになってしまいます。

  次のようにすると INSERT できます。

    =# create table tablebit2( tbit2 bit(4)[]);
    CREATE
    =# insert into tablebit2 values ('{B1011, B1111}');
    INSERT 41033 1
    =# select tbit2[1] | B'0100' from tablebit2 ;
     ?column? 
    ----------
     1111
    (1 row)

    =# 

;;; 質問2:
;;; ビット演算子を使用するとDBのデータサイズはビット演算子分のみになるのでしょう
;;; か。

  例えば、以下のタプルサイズはどちらも同じになります。

    create table tablebit2(tbit2 bit(4)[]);
    create table tablebit2(tbit2 bit(8)[]);

  タプルサイズを考えるには、他のカラムとの関係でのアラインメント、圧縮なども考
える必要があるので、カラムひとつのみで考えない方がよいです。

  結果を見てしまうならば、以下のツールを使うとタプルサイズがどのようになったか
を調べることができます。

    http://sources.redhat.com/rhdb/tools.html
    pg_filedump

;;; 7になってから始めてなので/DATA下を見てもどれが該当テーブルなのか判りません
;;; でした。

  contrib の oid2name を使うか、次のようにして分かります。

    =# select relname, relfilenode from pg_class where relname !~ '^pg_';
	relname     | relfilenode 
    ----------------+-------------
     pm_aggregate   |       16655
     pm_database    |       16658
     pm_class       |       16661
     class1         |       30978
     seq1           |       30989
     vclass1        |       30991
     class2c        |       41015
     class2c1       |       41017
     class2         |       41005
     class2_j_index |       41008
     class2c2       |       41019
     class3         |       41024
     tablebit2      |       41028
     classbit256    |       41039
     tablebit3      |       41042
    (15 rows)

    =# 


Kenji Sugita
sugita @ sra.co.jp




pgsql-jp メーリングリストの案内