重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。
どなたかご存知であれば教えてください。
現在私はPostgres7.4.6を使用しています。
テーブルを作成した際にtimestamp型のフィールドを一つ作っておいたのですが、このフィールドサイズを見ると254Byteとなっていました。
調べてみてもtimestamp型は8Byteだと記述されていて、
なぜ254も取られるのかがわかりません。
解るかたいらっしゃいましたらよろしくお願いします。

A 回答 (2件)

#1回答者です。



PostgreSQL 8.0を使用していますが、timestampの長さは8と表示されます。

CSEを試しにダウンロードして使ってみました(ver1.59)が、「テーブルレイアウトを確認」とは、どの操作のことでしょうか?

「プロパティ」の「フィールド」タブでの表示なら、私の環境では、長さは8と表示されます。

CSEの表示で分かったのですが、CSEはPostgreSQLのシステムカタログ(http://www.postgresql.jp/document/pg746doc/html/ …)のpg_typeやpg_attributeを参照しています。
長さの所に、可変長の場合は負の値が入っていたりと、特殊な管理がされています。

>PostgreSQLは、ユーザ表内にシステム用のフィールドをたくさん作ります。
>これはどういう意味なのでしょうか。

上述のpg_type等を検索すると分かるのですが、PostgreSQLは、oidなどいくつかのシステム用のフィールドをユーザの表内部に作成するようです。

表の列構成(列のデータ型)は、どんな内容でしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
曖昧な表現で申し訳ありません。
「テーブルレイアウトを確認」とはおっしゃるとおり「プロパティ」の「フィールド」タブでの表示の事です。

指示通り、pg_typeで確認したときのtimestamp型の長さの所には8バイトになっていました。
ここで8となっているのに何故作成したら254になるのだろう・・・。
ともあれシステムカタログについては何も知らなかったので勉強になりました。ありがとうございました。

お礼日時:2006/05/17 09:13

何をどのような方法で見て、そう判断したのでしょうか?



PostgreSQLは、ユーザ表内にシステム用のフィールドをたくさん作ります。
システムカタログの参照方法も、単純ではありません。
参照方法を、誤っていないでしょうか?

この回答への補足

回答ありがとうございます。

調べたというのは本やインターネットのサイトで、ということです。
データ型はIntなら4バイト、Textなら8190バイト、dateで6バイトというように可変型で無い限りはそれぞれ決まったデータ長を持っているとおもいます。

ではtimestamp型は何バイトなのかと調べた結果、timestamp型は8バイトであるという結果しか見つけることしかできませんでした。
しかし、私の場合はtimestamp型で定義すると254バイトできられてしまうのです。
254バイトというのを確認した方法は、普段使っている「Common SQL Environment」というDB用のツールでテーブルレイアウトを確認という方法と、
アクセスでリンクし、データ長を確認した二つの方法です。
どちらも254バイトという結果が得られました。

>PostgreSQLは、ユーザ表内にシステム用のフィールドをたくさん作ります。
これはどういう意味なのでしょうか。
ご指南いただければ幸いです。

補足日時:2006/05/09 21:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す