如果Postgres DB在其表中具有唯一ID,那么如何在不知道其表的情况下使用其ID找到行?

时间:2017-11-19 11:11:12

标签: postgresql

关注blog of Rob Conery我在Postgres数据库的表格中有一组唯一ID。

现在,使用这些唯一ID,有没有办法查询数据库中的行而不知道它在哪个表中?或者可以将这些表编入索引,以便如果当前表中的行不可用,我只是增加索引,我可以查询下一个表?

2 个答案:

答案 0 :(得分:0)

简而言之 - 如果你没有为此做好准备 - 那么不。你可以通过生成自己的uuid来做好准备。请看here。例如PG有维护秩序的uuid。 uuid v5也有名称空间。所以你可以建立层次结构。然而,这是通过散列命名空间来完成的,而且我不知道在PG内部做相反的工具。

答案 1 :(得分:0)

如果您事先知道所有可能的表,您可以准备一个查询,该查询只需 UNION 对所有表进行带标记类型的搜索。如果有两个名为 commentsnews 的表,您可以执行以下操作:

PREPARE type_of_id(uuid) AS
  SELECT id, 'comments' AS type
  FROM comments
  WHERE id = $1
  UNION
  SELECT id, 'news' AS type
  FROM news
  WHERE id = $1;

EXECUTE type_of_id('8ecf6bb1-02d1-4c04-8875-f1da62b7f720');

可以通过查询 pg_catalog.pg_tables 并动态生成相关查询来自动生成此内容。