Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0d6909e

Browse files
committed
Teach pg_dump to dump comments attached to the columns of a composite type.
Taro Minowa (Higepon)
1 parentadfa042 commit0d6909e

File tree

1 file changed

+115
-1
lines changed

1 file changed

+115
-1
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*by PostgreSQL
1313
*
1414
* IDENTIFICATION
15-
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.541 2009/07/20 20:53:40momjian Exp $
15+
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.542 2009/07/23 22:59:40tgl Exp $
1616
*
1717
*-------------------------------------------------------------------------
1818
*/
@@ -134,6 +134,7 @@ static void dumpBaseType(Archive *fout, TypeInfo *tinfo);
134134
staticvoiddumpEnumType(Archive*fout,TypeInfo*tinfo);
135135
staticvoiddumpDomain(Archive*fout,TypeInfo*tinfo);
136136
staticvoiddumpCompositeType(Archive*fout,TypeInfo*tinfo);
137+
staticvoiddumpCompositeTypeColComments(Archive*fout,TypeInfo*tinfo);
137138
staticvoiddumpShellType(Archive*fout,ShellTypeInfo*stinfo);
138139
staticvoiddumpProcLang(Archive*fout,ProcLangInfo*plang);
139140
staticvoiddumpFunc(Archive*fout,FuncInfo*finfo);
@@ -6755,6 +6756,119 @@ dumpCompositeType(Archive *fout, TypeInfo *tinfo)
67556756
destroyPQExpBuffer(q);
67566757
destroyPQExpBuffer(delq);
67576758
destroyPQExpBuffer(query);
6759+
6760+
/* Dump any per-column comments */
6761+
dumpCompositeTypeColComments(fout,tinfo);
6762+
}
6763+
6764+
/*
6765+
* dumpCompositeTypeColComments
6766+
* writes out to fout the queries to recreate comments on the columns of
6767+
* a user-defined stand-alone composite type
6768+
*/
6769+
staticvoid
6770+
dumpCompositeTypeColComments(Archive*fout,TypeInfo*tinfo)
6771+
{
6772+
CommentItem*comments;
6773+
intncomments;
6774+
PGresult*res;
6775+
PQExpBufferquery;
6776+
PQExpBuffertarget;
6777+
OidpgClassOid;
6778+
inti;
6779+
intntups;
6780+
inti_attname;
6781+
inti_attnum;
6782+
6783+
query=createPQExpBuffer();
6784+
6785+
/* We assume here that remoteVersion must be at least 70300 */
6786+
appendPQExpBuffer(query,
6787+
"SELECT c.tableoid, a.attname, a.attnum "
6788+
"FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a "
6789+
"WHERE c.oid = '%u' AND c.oid = a.attrelid "
6790+
" AND NOT a.attisdropped "
6791+
"ORDER BY a.attnum ",
6792+
tinfo->typrelid);
6793+
6794+
/* Fetch column attnames */
6795+
res=PQexec(g_conn,query->data);
6796+
check_sql_result(res,g_conn,query->data,PGRES_TUPLES_OK);
6797+
6798+
/* Expecting at least a single result */
6799+
ntups=PQntuples(res);
6800+
if (ntups<1)
6801+
{
6802+
write_msg(NULL,"query returned no rows: %s\n",query->data);
6803+
exit_nicely();
6804+
}
6805+
6806+
pgClassOid=atooid(PQgetvalue(res,0,PQfnumber(res,"tableoid")));
6807+
6808+
/* Search for comments associated with type's pg_class OID */
6809+
ncomments=findComments(fout,
6810+
pgClassOid,
6811+
tinfo->typrelid,
6812+
&comments);
6813+
6814+
/* If no comments exist, we're done */
6815+
if (ncomments <=0)
6816+
{
6817+
PQclear(res);
6818+
destroyPQExpBuffer(query);
6819+
return;
6820+
}
6821+
6822+
/* Build COMMENT ON statements */
6823+
target=createPQExpBuffer();
6824+
6825+
i_attnum=PQfnumber(res,"attnum");
6826+
i_attname=PQfnumber(res,"attname");
6827+
while (ncomments>0)
6828+
{
6829+
constchar*attname;
6830+
6831+
attname=NULL;
6832+
for (i=0;i<ntups;i++)
6833+
{
6834+
if (atoi(PQgetvalue(res,i,i_attnum))==comments->objsubid)
6835+
{
6836+
attname=PQgetvalue(res,i,i_attname);
6837+
break;
6838+
}
6839+
}
6840+
if (attname)/* just in case we don't find it */
6841+
{
6842+
constchar*descr=comments->descr;
6843+
6844+
resetPQExpBuffer(target);
6845+
appendPQExpBuffer(target,"COLUMN %s.",
6846+
fmtId(tinfo->dobj.name));
6847+
appendPQExpBuffer(target,"%s",
6848+
fmtId(attname));
6849+
6850+
resetPQExpBuffer(query);
6851+
appendPQExpBuffer(query,"COMMENT ON %s IS ",target->data);
6852+
appendStringLiteralAH(query,descr,fout);
6853+
appendPQExpBuffer(query,";\n");
6854+
6855+
ArchiveEntry(fout,nilCatalogId,createDumpId(),
6856+
target->data,
6857+
tinfo->dobj.namespace->dobj.name,
6858+
NULL,tinfo->rolname,
6859+
false,"COMMENT",SECTION_NONE,
6860+
query->data,"",NULL,
6861+
&(tinfo->dobj.dumpId),1,
6862+
NULL,NULL);
6863+
}
6864+
6865+
comments++;
6866+
ncomments--;
6867+
}
6868+
6869+
PQclear(res);
6870+
destroyPQExpBuffer(query);
6871+
destroyPQExpBuffer(target);
67586872
}
67596873

67606874
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp