[pgsql-jp: 30848] Re: pg_typeの読み方を教えて下さい。

ISHIDA Akio iakio @ pjam.jpweb.net
2003年 8月 28日 (木) 09:35:37 JST


こんにちは。石田@苫小牧市です。
js wrote:
> 今ちょっとWindowsアプリケーションを作成していまして DML文で
> データ型がVARCHARもしくはCHARの場合は シングルクォート '値'
> NUMERICかINTEGERの場合は 値 ('なし)というのをループの中でしようとしていま
> す。

同様の処理をしているプログラムが何かなかったかと考えたところ、
pg_dump で -d オプションを付けたときの動作 (データを copy ではなく
insert 文として書きだす) で同様のクォート処理をしているのではないかと
思いつきました。

で、ソースを見てみると、やはり PQftype() で判断しているようです

src/bin/pg_dump/pg_dump.c(1055)
                switch (PQftype(res, field))
                {
                    case INT2OID:
                    case INT4OID:
                    case INT8OID:
(中略)
                    default:
                        /* All other types are printed as string
literals. */
                        resetPQExpBuffer(q);
                        appendStringLiteral(q, PQgetvalue(res, tuple,
field), false);
                        archprintf(fout, "%s", q->data);
                        break;

INT2OID, INT4OID などは pg_type.h で定義されています。同様に
VARCHAROID も定義されています。

#define VARCHAROID              1043

なので、c でプログラムを作るのであれば、pg_type.h の定義を使うのが
妥当かと思います。

--
ISHIDA Akio<iakio @ pjam.jpweb.net>





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