[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 メーリングリストの案内