- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-05-13T00:47:24+09:00","","")
#author("2017-05-17T21:20:43+09:00","default:haikikyou","haikikyou")
[[PostgreSQL/開発]]
[[view source on doxygen.postgresql.org>https://doxygen.postgresql.org/foreign_8c_source.html]]
#contents
* 概要 [#haf3a94a]
- ヒープ操作のための機能
- リレーション(テーブル)のオープン・クローズ,タプルの追加・削除・更新などの機能も定義されている
* サンプルプログラム [#k4ee8168]
** テーブル属性の取得 [#eacff995]
以下では,oidが24576のテーブルをオープンし属性名のリストを取得している。
#geshi(c){{
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);
}
heap_close(relid, NoLock);
/*
ヒープを閉じる。
relcacheが実際の処理を行ない,ここでは参照カウント数を減らす。 */
heap_close(rel, NoLock);
}}
* 参考・関連 [#q09d1047]
- [[heapam.c>https://doxygen.postgresql.org/heapam_8c.html]] - on doxygen.postgresql.org
&size(12){&color(white,orange){ 関連 };};
#related