如何编写 SQL 将 XML 文件读入 PostgreSQLXML
值?
PostgreSQL 有一个原生XML 数据类型,它具有XMLPARSE
将文本字符串解析为该类型的功能。它还有从文件系统读取数据的方法;COPY
声明等。
但是我没有看到一种方法来编写本机 PostgreSQL SQL 语句来从文件系统条目中读取内容并使用它来填充一个XML
值。我怎样才能做到这一点?
如何编写 SQL 将 XML 文件读入 PostgreSQLXML
值?
PostgreSQL 有一个原生XML 数据类型,它具有XMLPARSE
将文本字符串解析为该类型的功能。它还有从文件系统读取数据的方法;COPY
声明等。
但是我没有看到一种方法来编写本机 PostgreSQL SQL 语句来从文件系统条目中读取内容并使用它来填充一个XML
值。我怎样才能做到这一点?
类似于上一个问题的这个答案,如果你不想要的限制
pg_read_file()
(简而言之:pg_read_file
不能读取数据库目录之外的文件,并且读取当前会话的字符编码中的文本)。此函数适用于任何路径,但需要以超级用户身份创建:
lo_get
在 9.4 中引入,因此对于旧版本,您需要:然后:
该
pg_read_binary_file
函数可以做到这一点。它有局限性:PostgreSQL 9.1 或更高版本中的新功能;必须是数据库超级用户拥有的会话;必须读取数据库目录或以下目录中的文件。这些在我的用例中是可以接受的。
因此,以下内容将用于从文件创建本机
XML
值:在 PostgreSQL 8.3 – 9.0 中,
pg_read_file
可以使用该函数,但您不能指定特定于文件的编码(它将文件作为当前会话编码中的文本读取)。我在 SO 最近的回答中发布了您所要求的完整实现。
关键特性是
xpath()
函数pg_read_file()
、数组处理、plpgsql 函数、..