Postgres:在带有Box元素的表上使用table_to_xmlschema

Postgres:在带有Box元素的表上使用table_to_xmlschema,xml,postgresql,jaxb,xsd,Xml,Postgresql,Jaxb,Xsd,因此,我试图提取我的Postgres数据库表的XML描述,以便与JAXB一起处理一些JavaDB通信。问题是,我在表中的几个字段中使用了Postgres“box”数据类型,而Postgres表_to_xmlschema似乎无法为box生成有效的XML 这是我的SSCCE: Postgres表格创建:创建表格框Test foo Box Postgres调用生成XML模式:选择*从表_到_xmlschema'BoxTest',true,true,'SomeName' 结果架构: <xsd:sc

因此,我试图提取我的Postgres数据库表的XML描述,以便与JAXB一起处理一些JavaDB通信。问题是,我在表中的几个字段中使用了Postgres“box”数据类型,而Postgres表_to_xmlschema似乎无法为box生成有效的XML

这是我的SSCCE:

Postgres表格创建:创建表格框Test foo Box

Postgres调用生成XML模式:选择*从表_到_xmlschema'BoxTest',true,true,'SomeName'

结果架构:

<xsd:schema
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="SomeName"
     elementFormDefault="qualified">
 <xsd:simpleType name="UDT.User.pg_catalog.box">
 </xsd:simpleType>
 <xsd:complexType name="RowType.User.public.boxtest">
   <xsd:sequence>
     <xsd:element name="foo" type="UDT.User.pg_catalog.box" nillable="true"></xsd:element>
   </xsd:sequence>
 </xsd:complexType>
 <xsd:element name="boxtest" type="RowType.User.public.boxtest"/>
</xsd:schema>
问题是“box”类型的描述是空的,尽管它是Postgres的内置类型。特别是,我得到了一个SAX解析错误,消息为org.xml.SAX.SAXParseException:s4s elt必须匹配。2:“simpleType”的内容必须匹配annotation?,restriction | list | union。没有找到足够的元素。那么-是否有一些我应该传递/设置的选项来更正该输出?如果没有内置选项,Postgres中是否有一种简单的方法来调整/纠正表\u到\u xmlschema的输出?对于任何提出的解决方案,我必须做些什么才能使JAXB正确地使用生成的模式

如果重要的话,我使用的是Postgres 9.1,我认为jaxb impl 2.1.6


提前谢谢

正如Craig所指出的,当前的table_to_xmlschema函数不会递归地分解递归类型。在不久的将来我看不到这种变化,在稳定的版本中肯定不会,所以最好的选择是编写自己的函数来查看目录,并递归地为您构建模式。这应该不会太糟糕,但这将是一个工作点。实际上,我正在从事类似的项目,用于PostgreSQL和应用程序之间的复杂数据表示,尽管没有使用XML作为中介。执行此操作所需的实际查询并不太糟糕

您需要做的是创建一个递归查询来查找类型,使用pg_属性和pg_类型上的递归cte,然后创建一个函数(可能是pl/perl之类的函数),该函数为您生成适当的文本


但是内置函数对您不起作用。

PostgreSQL版本?我的Pg没有表到xmlschemaregclass,布尔值,布尔值,它有表到xmlschemaregclass,布尔值,布尔值,文本。您似乎使用了类似于8.2的古老版本,并且受到隐式转换为文本的影响—请注意输出中的targetNamespace=false。紧急更新,8.2即将离开支持。JAXB具体抱怨什么?请给我准确的错误信息好吗?预期产量是多少?如果将tableforest参数3rd arg,2nd boolean设置为false,它是否生成您想要的内容?根据需要编辑问题-Postgres 9.1;我确实得到了名称空间的隐式转换。我希望框类型的定义指示框的实际内容-例如,定义平面上区域的一对x,y坐标。将表_的调用参数更改为_xmlschema不会影响box字段的空simpleType项的生成。啊,所以您的问题是,复合类型的结构可能不会递归地包含在模式中,而是被引用为UDT。有趣的