Hello.
While I revised the translation, I ran across the following code.
> form_policy = (Form_pg_policy) GETSTRUCT(tuple);
>
> appendStringInfo(&buffer, _("policy %s on "),
> NameStr(form_policy->polname));
> getRelationDescription(&buffer, form_policy->polrelid);
getRelationDescription appends a string like "table %s" to the
buffer so finally a message like "policy %s on table %s" is
constructed but this is very unfriendly to Japanese syntax.
The "policy %s" and "<objname> %s" are transposed in Japaese
syntax. Specifically "<objname> %s NO <policy> %s" is the
natural translation of "policy %s on <objname> %s". But currently
we cannot get the natural error message in Japanese.
For the reason, I'd like to propose to refactor
getObjectDescription:OPCLASS_POLICY as the attached patch. The
same structure is seen for OPCLASS_AMOP.
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index d371c47842..baa77e4e79 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -3356,6 +3356,7 @@ getObjectDescription(const ObjectAddress *object)
SysScanDesc sscan;
HeapTuple tuple;
Form_pg_policy form_policy;
+ StringInfoData reldesc;
policy_rel = heap_open(PolicyRelationId, AccessShareLock);
@@ -3375,9 +3376,13 @@ getObjectDescription(const ObjectAddress *object)
form_policy = (Form_pg_policy) GETSTRUCT(tuple);
- appendStringInfo(&buffer, _("policy %s on "),
- NameStr(form_policy->polname));
- getRelationDescription(&buffer, form_policy->polrelid);
+ initStringInfo(&reldesc);
+ getRelationDescription(&reldesc, form_policy->polrelid);
+
+ appendStringInfo(&buffer, _("policy %s on %s"),
+ NameStr(form_policy->polname),
+ reldesc.data);
+ pfree(reldesc.data);
systable_endscan(sscan);
heap_close(policy_rel, AccessShareLock);