Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PostgreSQL视图读取另一个表,转换数据并返回结果_Java_Postgresql_Views_Pljava - Fatal编程技术网

Java PostgreSQL视图读取另一个表,转换数据并返回结果

Java PostgreSQL视图读取另一个表,转换数据并返回结果,java,postgresql,views,pljava,Java,Postgresql,Views,Pljava,请一些人提出实施这一目标的最佳方法: 本质上,我想要的是PostgreSQL中的一个虚拟表,当查询时,它会从其他表中查找数据(称之为原始数据表)。但关键是,原始数据表中的数据需要转换,当转换完成后,结果会像在原始表中一样返回 我会用插图和例子来解释(不是我真正的程序,只是一个简单的例子来解释我需要的主要东西): 原始数据表 | id (int) | data (byte[]) | ---------------------------- | ... | ... |

请一些人提出实施这一目标的最佳方法:

本质上,我想要的是PostgreSQL中的一个虚拟表,当查询时,它会从其他表中查找数据(称之为原始数据表)。但关键是,原始数据表中的数据需要转换,当转换完成后,结果会像在原始表中一样返回

我会用插图和例子来解释(不是我真正的程序,只是一个简单的例子来解释我需要的主要东西):

原始数据表

| id (int) | data (byte[]) |
----------------------------
|   ...    |      ...      |
|   ...    |      ...      |
| name (varchar) | address (varchar) | phone (varchar) |
--------------------------------------------------------
|       ...      |        ...        |       ...       |
|       ...      |        ...        |       ...       |
|       ...      |        ...        |       ...       |
人员表(虚拟表)

我现在想要的是,当我做以下事情时:

SELECT * FROM person WHERE name = 'Kim';
  • 应查询原始表中的数据,即获取所有字节[]数组
  • 反序列化数据以从原始数据中获取(姓名、地址、电话)
  • 应用任何条件,即name='Kim'
  • 将这组结果返回给用户,就像他们只是简单地查询Person表一样
对于反序列化/转换等,我猜我可能需要一些编程语言函数,所以对于Java来说,这样的东西可能有用吗

另外,您可以假设原始数据表不会很长,它被实现为一个固定大小的缓冲区,因此读取每个查询的所有条目并不是什么大问题


从概念上讲,我需要的是一个触发器函数,但我们似乎不能在读取时使用触发器。如果您能为我提供帮助,我将不胜感激。

我觉得数据库设计完全不符合要求。您正试图通过使用RDBMS的mis来重新实现RDBMS

但是如果您坚持使用这种设计,我能想到的唯一方法就是编写一个集合返回函数,以过程的方式对原始数据进行所有处理和解包。根据二进制数据的复杂性,PL/pgSQL可能就足够了


然后,您可以从retrieve_person()执行
SELECT*FROM retrieve_person()
,以获得所需的输出。

什么是更好的设计?其思想是,原始数据表会随着事件不断更新。与每次发生这种情况时填充每个单独的数据集不同,我希望反转过程:即,仅在用户请求时获取和转换数据。因此,我认为应该将数据集实现为应用于原始数据表的视图。对于这个问题,有什么更好的设计呢?许多工作已经投入到使Postgres在存储和检索数据方面相当高效的工作中;看起来你正试图做同样的事情。试着用标准字符串存储数据,看看速度有多快。实际上,您将提高检索速度,因为您只是查询数据,而不是转换数据。@Larry:为什么不按照您向我们展示的那样创建person表呢?如果您不能做到这一点,那么关系数据库似乎不是您的正确选择。您可能希望将原始数据存储为XML,然后只使用不同的XSLT转换instead@Aaron:但问题是原始数据实际上是来自提要的xml/html文档。因此,无论是每次接收到新提要时,我都可以转换并放入相应的数据存储中,或者我可以将其作为原始数据输入,等待用户在需要时请求数据。我认为第二个会更有效,这就是为什么我有我的设计。但是根据这个解释,我可以使用什么更好的技术呢?当feed出现时,解析每个XML文档并将数据持久化到表中。将所有转换内容保存在客户端应用程序中,并使用Postgres存储和提供转换后的数据。