Java PostgreSQL视图读取另一个表,转换数据并返回结果
请一些人提出实施这一目标的最佳方法: 本质上,我想要的是PostgreSQL中的一个虚拟表,当查询时,它会从其他表中查找数据(称之为原始数据表)。但关键是,原始数据表中的数据需要转换,当转换完成后,结果会像在原始表中一样返回 我会用插图和例子来解释(不是我真正的程序,只是一个简单的例子来解释我需要的主要东西): 原始数据表Java PostgreSQL视图读取另一个表,转换数据并返回结果,java,postgresql,views,pljava,Java,Postgresql,Views,Pljava,请一些人提出实施这一目标的最佳方法: 本质上,我想要的是PostgreSQL中的一个虚拟表,当查询时,它会从其他表中查找数据(称之为原始数据表)。但关键是,原始数据表中的数据需要转换,当转换完成后,结果会像在原始表中一样返回 我会用插图和例子来解释(不是我真正的程序,只是一个简单的例子来解释我需要的主要东西): 原始数据表 | id (int) | data (byte[]) | ---------------------------- | ... | ... |
| id (int) | data (byte[]) |
----------------------------
| ... | ... |
| ... | ... |
| name (varchar) | address (varchar) | phone (varchar) |
--------------------------------------------------------
| ... | ... | ... |
| ... | ... | ... |
| ... | ... | ... |
人员表(虚拟表)
我现在想要的是,当我做以下事情时:
SELECT * FROM person WHERE name = 'Kim';
- 应查询原始表中的数据,即获取所有字节[]数组李>
- 反序列化数据以从原始数据中获取(姓名、地址、电话)李>
- 应用任何条件,即name='Kim'
- 将这组结果返回给用户,就像他们只是简单地查询Person表一样
从概念上讲,我需要的是一个触发器函数,但我们似乎不能在读取时使用触发器。如果您能为我提供帮助,我将不胜感激。我觉得数据库设计完全不符合要求。您正试图通过使用RDBMS的mis来重新实现RDBMS 但是如果您坚持使用这种设计,我能想到的唯一方法就是编写一个集合返回函数,以过程的方式对原始数据进行所有处理和解包。根据二进制数据的复杂性,PL/pgSQL可能就足够了
然后,您可以从retrieve_person()执行
SELECT*FROM retrieve_person()
,以获得所需的输出。什么是更好的设计?其思想是,原始数据表会随着事件不断更新。与每次发生这种情况时填充每个单独的数据集不同,我希望反转过程:即,仅在用户请求时获取和转换数据。因此,我认为应该将数据集实现为应用于原始数据表的视图。对于这个问题,有什么更好的设计呢?许多工作已经投入到使Postgres在存储和检索数据方面相当高效的工作中;看起来你正试图做同样的事情。试着用标准字符串存储数据,看看速度有多快。实际上,您将提高检索速度,因为您只是查询数据,而不是转换数据。@Larry:为什么不按照您向我们展示的那样创建person表呢?如果您不能做到这一点,那么关系数据库似乎不是您的正确选择。您可能希望将原始数据存储为XML,然后只使用不同的XSLT转换instead@Aaron:但问题是原始数据实际上是来自提要的xml/html文档。因此,无论是每次接收到新提要时,我都可以转换并放入相应的数据存储中,或者我可以将其作为原始数据输入,等待用户在需要时请求数据。我认为第二个会更有效,这就是为什么我有我的设计。但是根据这个解释,我可以使用什么更好的技术呢?当feed出现时,解析每个XML文档并将数据持久化到表中。将所有转换内容保存在客户端应用程序中,并使用Postgres存储和提供转换后的数据。