- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个巨大的 xml 文件,除非将其导入数据库,否则无法打开。我为此使用 Postgres。我有一个与此数据文件一起使用的架构。列太多,所以我想自动执行从该模式创建表的过程,然后从我计算机上的本地驱动器导入数据文件以填充该表。我该怎么做呢?我在 SO 上看到了很多答案,但一直无法正确理解这一点。此外,我没有 super 用户权限,因此必须解决这个问题。
架构文件如下所示:
> <?xml version="1.0" encoding="UTF-8"?> <xs:schema
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified"
> targetNamespace="http://www.drugbank.ca" xmlns="http://www.drugbank.ca">
> <xs:element name="drugbank" type="drugbank-type">
> <xs:annotation>
> <xs:documentation>This is the root element for the DrugBank database schema. DrugBank is a database on drug and
> drug-targets.</xs:documentation>
> </xs:annotation>
> </xs:element>
> <xs:complexType name="drugbank-type">
> <xs:annotation>
> <xs:documentation>This is the root element type for the DrugBank database schema.</xs:documentation>
> </xs:annotation>
> <xs:sequence>
> <xs:element name="drug" type="drug-type" maxOccurs="unbounded"/>
> </xs:sequence>
> <xs:attribute name="version" type="xs:string" use="required">
> <xs:annotation>
> <xs:documentation>The DrugBank version for the exported XML file.</xs:documentation>
> </xs:annotation>
> </xs:attribute>
> <xs:attribute name="exported-on" type="xs:date" use="required">
> <xs:annotation>
> <xs:documentation>The date the XML file was exported.</xs:documentation>
> </xs:annotation>
> </xs:attribute>
> </xs:complexType>
> <xs:complexType name="drug-type">
> <xs:sequence>
> <xs:element maxOccurs="unbounded" minOccurs="1" name="drugbank-id"
> type="drugbank-drug-salt-id-type"> </xs:element>
> <xs:element name="name" type="xs:string"/>
> <xs:element name="description" type="xs:string"/>
> <xs:element name="cas-number" type="xs:string"/>
> <xs:element name="unii" type="xs:string"/>
> <xs:element name="average-mass" type="xs:float" minOccurs="0"/>
> <xs:element name="monoisotopic-mass" type="xs:float" minOccurs="0"/>
> <xs:element name="state" type="state-type" minOccurs="0"/>
> <xs:element name="groups" type="group-list-type"/>
> <xs:element name="general-references" type="reference-list-type"/>
> <xs:element name="synthesis-reference" type="xs:string"/>
> <xs:element name="indication" type="xs:string"/>
> <xs:element name="pharmacodynamics" type="xs:string"/>
> <xs:element name="mechanism-of-action" type="xs:string"/>
> <xs:element name="toxicity" type="xs:string"/>
> <xs:element name="metabolism" type="xs:string"/>
> <xs:element name="absorption" type="xs:string"/>
> <xs:element name="half-life" type="xs:string"/>
> <xs:element name="protein-binding" type="xs:string"/>
> <xs:element name="route-of-elimination" type="xs:string"/>
> <xs:element name="volume-of-distribution" type="xs:string"/>
> <xs:element name="clearance" type="xs:string"/>
> <xs:element name="classification" type="classification-type" minOccurs="0"/>
> <xs:element name="salts" type="salt-list-type"/>
> <xs:element name="synonyms" type="synonym-list-type"/>
> <xs:element name="products" type="product-list-type"/>
> <xs:element name="international-brands" type="international-brand-list-type"/>
> <xs:element name="mixtures" type="mixture-list-type"/>
> <xs:element name="packagers" type="packager-list-type"/>
> <xs:element name="manufacturers" type="manufacturer-list-type"/>
> <xs:element name="prices" type="price-list-type"/>
> <xs:element name="categories" type="category-list-type"/>
> <xs:element name="affected-organisms" type="affected-organism-list-type"/>
> <xs:element name="dosages" type="dosage-list-type"/>
> <xs:element name="atc-codes" type="atc-code-list-type"/>
> <xs:element name="ahfs-codes" type="ahfs-code-list-type"/>
> <xs:element name="pdb-entries" type="pdb-entry-list-type"/>
> <xs:element name="fda-label" type="xs:anyURI" minOccurs="0"/>
> <xs:element name="msds" type="xs:anyURI" minOccurs="0"/>
> <xs:element name="patents" type="patent-list-type"/>
> <xs:element name="food-interactions" type="food-interaction-list-type"/>
> <xs:element name="drug-interactions" type="drug-interaction-list-type"/>
> <xs:element minOccurs="0" name="sequences" type="sequence-list-type"/>
> <xs:element minOccurs="0" name="calculated-properties" type="calculated-property-list-type"/>
> <xs:element name="experimental-properties" type="experimental-property-list-type"/>
> <xs:element name="external-identifiers" type="external-identifier-list-type"/>
> <xs:element name="external-links" type="external-link-list-type"/>
> <xs:element name="pathways" type="pathway-list-type"/>
> <xs:element name="reactions" type="reaction-list-type"/>
> <xs:element name="snp-effects" type="snp-effect-list-type"/>
> <xs:element name="snp-adverse-drug-reactions" type="snp-adverse-drug-reaction-list-type"/>
> <xs:element name="targets" type="target-list-type"/>
> <xs:element name="enzymes" type="enzyme-list-type"/>
> <xs:element name="carriers" type="carrier-list-type"/>
> <xs:element name="transporters" type="transporter-list-type"/>
> </xs:sequence>
这只是一部分。这是一个巨大的文件。非常感谢任何形式的帮助/指导。
最佳答案
将 XML 文件导入 PostgreSQL 的方法可能有上千种,但我发现这里有一种替代方法很容易实现,并且已经用大型 xml 文档 (120GB+) 进行了测试
根据 XML 文件的大小,考虑拆分它。一个很棒的工具是 xml_split .此命令拆分 file.xml
在最大 100MB 的较小文件中:
xml_split -n 5 -l 1 -s 100MB file.xml
将文件拆分为合理的大小后,您就可以开始导入它们,而不会出现内存不足的风险。
让我们考虑以下 XML 文件结构 ...
<?xml version="1.0"?>
<t>
<foo>
<id j="a">1</id>
<val>bar1</val>
</foo>
<foo>
<id j="b">8</id>
<val>bar1</val>
</foo>
<foo>
<id j="c">5</id>
<val>bar1</val>
</foo>
<foo>
<id j="b">2</id>
</foo>
</t>
...和下面的目标表,我们将在其中插入 XML 记录。
CREATE TABLE t (id TEXT, entry XML);
下面的代码将 XML 文件导入临时 unlogged表和 unnest他们进入表格 t
使用 CTE (又名 WITH 子句)由节点 <foo>
.命令perl -pe 's/\n/\\n/g'
用 \\n
替换换行符这样你就不会得到 Premature end of data
异常:
#!/bin/bash
psql testdb -c "CREATE UNLOGGED TABLE tmp (entry xml);"
for f in /path/to/your/files/;do
cat $f | perl -pe 's/\n/\\n/g' |psql testdb -c "COPY tmp FROM STDIN;"
psql testdb -c "
WITH j AS (
SELECT UNNEST(XPATH('//t/foo',entry)) AS entry FROM tmp
)
INSERT INTO t
SELECT XPATH('//foo/id/text()',j.entry),j.entry FROM j;
TRUNCATE TABLE tmp;"
done
psql testdb -c "DROP TABLE tmp;"
这是你的数据:
testdb=# SELECT * FROM t;
id | entry
-----+--------------------------
{1} | <foo> +
| <id j="a">1</id>+
| <val>bar1</val> +
| </foo>
{8} | <foo> +
| <id j="b">8</id>+
| <val>bar1</val> +
| </foo>
{5} | <foo> +
| <id j="c">5</id>+
| <val>bar1</val> +
| </foo>
{2} | <foo> +
| <id j="b">2</id>+
| </foo>
(4 Zeilen)
关于java - 将 xml 模式导入 postgres 以自动创建一个表,然后用 xml 文件填充它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49862106/
我想知道这里是否有人有安装 Postgres-XL 的经验,新的开源多线程版本的 PostgreSQL。我计划将一组 1-2 TB 的数据库从常规 Postgres 9.3 迁移到 XL,并且想知道这
我想创建一个 postgres 备份脚本,但我不想使用 postgres 用户,因为我所在的 unix 系统几乎没有限制。我想要做的是在 crontab 上以 unix 系统(网络)的普通用户身份运行
我正在尝试编写一个 node-postgres 查询,它采用一个整数作为参数在间隔中使用: const query = { text: `SELECT foo
如何在不使用 gui 的情况下停止特定的 Postgres.app 集群。 我想使用 bash/Terminal.app 而不是 gui 我还应该指出,Postgres 应用程序有一个这样的菜单 如果
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我正在使用 docker 运行 Postgres 图像。它曾经在 Windows10 和 Ubuntu 18.04 上运行没有任何问题。 在 Ubuntu 系统上重新克隆项目后,它在运行 docker
我正在使用 python(比如表 A)将批处理 csv 文件加载到 postgres。我正在使用 pandas 将数据上传到更快的 block 中。 for chunk in pd.read_csv(
所以是的,标题说明了一切,我需要以某种方式将 DB 从源服务器获取到新服务器,但更重要的是旧服务器正在崩溃 :P 有什么方法可以将它全部移动到新服务器并导入它? 旧服务器只是拒绝再运行 Postgre
这主要是出于好奇而提出的问题。我正在浏览 Postgres systemd 单元文件,以了解 systemd 可以做什么。 Postgres 有两个 systemd 单元文件。一个用于代替 syste
从我在 pg_hba.conf 中读到的内容,我推断,为了确保提示我输入 postgres 用户的密码,我应该从当前的“对等”编辑 pg_hba.conf 的前两个条目的方法'到'密码'或'md5',
我已连接到架构 apm。 尝试执行函数并出现以下错误: ERROR: user mapping not found for "postgres" 数据库连接信息说: apm on postgres@
我在 ubuntu 12.04 服务器上,我正在尝试安装 postgresql。截至目前,我已成功安装它但无法配置它。我需要创建一个角色才能继续前进,我在终端中运行了这个命令: root@hostna
我无法以“postgres”用户身份登录到“postgres”数据库。操作系统:REHL 服务器版本 6.3PostgreSQL 版本:8.4有一个数据库“jiradb”用作 JIRA 6.0.8 的
我正在尝试将现有数据库导入 postgres docker 容器。 这就是我的处理方式: docker run --name pg-docker -e POSTGRES_PASSWORD=*****
我们的 Web 应用程序在 postgres 9.3 和 Grails 2.5.3 上运行。当我们重新启动 postgres (/etc/init.d/postgresql restart) 并访问网
我想构建 postgres docker 容器来测试一些问题。我有: postgres 文件的归档文件夹(/var/lib/postgres/data/) 将文件夹放入 docker postgres
我有一个名为“stuff”的表,其中有一个名为“tags”的 json 列,用于存储标签列表,还有一个名为“id”的列,它是表中每一行的主键。我正在使用 postgres 数据库。例如,一行看起来像这
我对 sqlalchemy-psql 中的锁定机制是如何工作的感到非常困惑。我正在运行一个带有 sqlalchemy 和 postgres 的 python-flask 应用程序。由于我有多个线程处理
我(必须)使用 Postgres 8.4 数据库。在这个数据库中,我创建了一个函数: CREATE OR REPLACE FUNCTION counter (mindate timestamptz,m
我已经使用 PostgreSQL 几天了,它运行良好。我一直在通过默认的 postgres 数据库用户和另一个具有权限的用户使用它。 今天中午(在一切正常之后)它停止工作,我再也无法回到数据库中。我会
我是一名优秀的程序员,十分优秀!