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