0

有人可以建议实现这一点的最佳方法:

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

我将用插图和一个例子来解释(不是我的真实程序,只是一个简化的例子来解释我需要的主要内容):

原始数据表

| id (int) | data (byte[]) |
----------------------------
|   ...    |      ...      |
|   ...    |      ...      |

人员表(虚拟表)

| name (varchar) | address (varchar) | phone (varchar) |
--------------------------------------------------------
|       ...      |        ...        |       ...       |
|       ...      |        ...        |       ...       |
|       ...      |        ...        |       ...       |

我现在想要的是,当我做类似的事情时:

SELECT * FROM person WHERE name = 'Kim';
  • 应该查询原始表中的数据,即获取所有字节[]数组;
  • 反序列化数据以从原始数据中获取(姓名、地址、电话);
  • 应用任何条件,即 name = 'Kim'
  • 将这组结果返回给用户,就像他们只是简单地查询了 Person 表一样。

对于反序列化/转换等,我猜我可能需要一些编程语言功能,所以对于 Java,诸如Pl/Java之类的东西可能有用吗?

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

从概念上讲,我需要的是一个触发功能,但似乎我们不能在 READ 上触发。任何有关我如何解决此问题的帮助将不胜感激。

4

1 回答 1

1

那个数据库设计对我来说似乎完全崩溃了。您正试图通过误用 RDBMS 来重新实现 RDBMS。

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

然后你会做一个SELECT * FROM retrieve_person()得到你想要的输出。

于 2011-08-30T14:38:16.450 回答