PostgreSQL/開発

概要

  • ヒープ操作のための機能
  • リレーション(テーブル)のオープン・クローズ,タプルの追加・削除・更新などの機能も定義されている

サンプルプログラム

テーブル属性の取得

以下では,oidが24576のテーブルをオープンし属性名のリストを取得している。

Relation rel;
Oid relid = 24576;

/* インデックスや複合型,実態を持たない外部テーブルに対しては使えない */
rel = heap_open(relid, NoLock);

/* リレーションのタプルディスクリプタを取得する */
TupleDesc tupdesc = RelationGetDescr(rel);

/* nattsに属性数が入っている */
for (int i = 1; i <= tupdesc->natts; i++)
{
    /* 属性に関する情報を取得 */
    Form_pg_attribute attr = tupdesc->attrs[i - 1];

    /* ドロップされている場合はスキップ */
    if (attr->attisdropped)
        continue;

    /* 属性名を取得(pstrdupでコピーされる)*/
    char *colname = get_relid_attribute_name(relid, i);
    /* 属性名を取得 */
    // char *colname = NameStr(attr->attname);
    elog(NOTICE, "colname: %s", colname);
}

/*
ヒープを閉じる。
relcacheが実際の処理を行ない,ここでは参照カウント数を減らす。 */
heap_close(rel, NoLock);

参考・関連

 関連 

コメント



PR

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-04 (日) 13:34:36 (596d)
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP