postgresql 是否有办法查看所有AGE创建的表?

vaj7vani  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(9)|浏览(145)

例如,在PostgreSQL数据库中,可以使用

\dt

字符串
或者与

SELECT * FROM pg_catalog.pg_tables;


我们知道AGE会创建自己的标签表、顶点表和边表。
如何查看这些表,以及如何查询它们以查看它们沿着所有列?

w1e3prcc

w1e3prcc1#

ag_catalog包含Apache AGE使用的所有元数据。ag_graphs包含在ag_catalog中,它存储有关数据库中所有图的信息/命名空间。ag_label存储数据。要获取所有表,您需要:

SELECT * FROM ag_label;

字符串

rslzwgfq

rslzwgfq2#

如果我理解正确的话,我们可以利用这样一个概念,即对于您使用AGE创建的每个图,AGE都会为这个图创建一个单独的模式,该模式具有相关的表,并且这个模式的名称与您创建的图的名称完全相同。
因此,您可以使用图形名称作为模式名称,轻松地从pg_cataloginformation_schema表中选择在后台创建的表。
我们制作了一个年龄图

SELECT * FROM ag_catalog.create_graph('your_first_graph');

字符串
你可以在pg_catalog.pg_tablesinformation_schema.tables中查看它的相关表,这些表都是在幕后为它创建的,

SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname = 'your_first_graph';


并且,

SELECT *
FROM information_schema.tables
WHERE table_schema = 'your_first_graph';


如果您的目标是查询它们并观察它们的条目,则可以使用<your graph name>.<desired table name>进行查询,例如,

SELECT *
FROM your_first_graph._ag_label_edge ;


实际上,如果您对提供的详细表信息(如tablespace_oid、oid..等)不感兴趣,您可以直接使用ag_label来获取表名、类型和与它们相关的图形,如:

SELECT * FROM ag_label ;


就是这样,希望能有所帮助!

qeeaahzv

qeeaahzv3#

可以使用以下查询:

SELECT * FROM ag_label;

字符串
在AGE中得到类似的结果,例如:

name       | graph | id | kind |           relation           |        seq_name
------------------+-------+----+------+------------------------------+-------------------------
 _ag_label_vertex | 16944 |  1 | v    | "Demo"._ag_label_vertex      | _ag_label_vertex_id_seq
 _ag_label_edge   | 16944 |  2 | e    | "Demo"._ag_label_edge        | _ag_label_edge_id_seq
 Person           | 16944 |  3 | v    | "Demo"."Person"              | Person_id_seq
 REL              | 16944 |  4 | e    | "Demo"."REL"                 | REL_id_seq
 KNOWS            | 16944 |  5 | e    | "Demo"."KNOWS"               | KNOWS_id_seq


其中kind列告诉您它是顶点v还是边e,其标签显示在name列中。
Here is a regress test检查函数的不同变化。

64jmpszr

64jmpszr4#

ag_graph存储所有图的名称和命名空间。

SELECT * FROM ag_graph;

字符串
ag_label存储所有数据(标签、关系、序列等)。

SELECT * FROM ag_label;


要查看所有顶点和边,请执行以下操作:

SELECT * FROM <graph_name>._ag_label_vertex;
SELECT * FROM <graph_name>._ag_label_edge;


要查看具有特定标签的所有顶点和边,请执行以下操作:

SELECT * FROM <graph_name>."<label_name>";

roejwanj

roejwanj5#

SELECT * FROM ag_label;可以做到这一点。
但是,请记住在运行查询之前SETsearch_path,否则只需运行SELECT * FROM ag_catalog.ag_label;

2ul0zpep

2ul0zpep6#

可以使用以下查询查看表

SELECT oid, * FROM ag_catalog.ag_label;

字符串
表结果如下:

oid   |        name       | graph | id | kind |        relation          |
----------+-------------------+-------+----+------+--------------------------+
   16950  | _age_label_vertex | 16937 |  1 | v    | database.ag_label_vertex |
   16963  | _age_label_edge   | 16937 |  2 | e    | database.ag_label_edge   |
   16975  | Country           | 16937 |  3 | v    | database."Country"       |
   16987  | City              | 16937 |  4 | v    | database."City"          |
   16999  | has_city          | 16937 |  5 | e    | database.has_city    |


其中:

  • oid:每个标签的唯一Postgres标识符;
  • name:标签的名称;
  • graph:Oid from ag_graph ;
  • id:标签的id,它对于每个图是唯一的;
  • kind:显示它是顶点“v”还是边“e”;
  • relation:标签的表名的模式限定名。

参考:https://matheusfarias03.github.io/AGE-quick-guide/

nzk0hqpo

nzk0hqpo7#

您可以参考本指南Guide
要创建图形,可以使用位于ag_catalog命名空间中的create_graph函数:

SELECT * FROM ag_catalog.create_graph('graph_name');

字符串
标签的数据存储在ag_label中,use可以使用此查询查看可用的标签:

SELECT oid, * FROM ag_catalog.ag_label;


其中,oid:每个标签的唯一Postgres标识符。

xzabzqsa

xzabzqsa8#

加载AGE并将搜索路径设置为ag_catalog后,可以使用此查询显示所有标签。SELECT * FROM ag_label;,这将显示ag_catalog中的所有节点和顶点。您还可以使用SELECT * FROM ag_graph;来显示所有图形名称。

v64noz0r

v64noz0r9#

在PostgreSQL中,由AGE扩展创建的表存储在ag_catalog模式中。
例如:
要查看ag_catalog模式中的所有表,请使用以下查询:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'ag_catalog';

字符串
要在ag_catalog中查看特定表的列,必须将表替换为要查看的表的实际名称:

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'ag_catalog' AND table_name = 'your_table_name';


如果要同时查看所有表及其列,可以使用以下查询:

SELECT t.table_name, c.column_name, c.data_type
FROM information_schema.tables t
JOIN information_schema.columns c ON t.table_name = c.table_name AND t.table_schema = c.table_schema
WHERE t.table_schema = 'ag_catalog';

相关问题