如何以编程方式访问Hasura元数据?获取角色与表列信息
获取Hasura角色与表列信息的方法(Hasura 2.12.1)
一、获取所有角色信息
Hasura的角色(包括自定义角色)只能通过Metadata API获取,无需访问数据库内部表。调用export_metadata接口即可拿到包含角色列表的完整元数据:
curl -X POST https://your-hasura-instance/v1/metadata \ -H "Content-Type: application/json" \ -H "X-Hasura-Admin-Secret: your-admin-secret" \ -d '{"type": "export_metadata", "version": 3}'
返回的JSON中,roles数组就是你创建的所有自定义角色。另外Hasura默认内置admin、anon、user三个角色,可直接补充到结果里。
二、获取所有表的列信息
有两种可靠方式,均适合自动化脚本调用:
方式1:Metadata API(推荐)
用get_tables接口批量拉取所有表的完整信息,包含列的详细属性:
curl -X POST https://your-hasura-instance/v1/metadata \ -H "Content-Type: application/json" \ -H "X-Hasura-Admin-Secret: your-admin-secret" \ -d '{"type": "get_tables", "args": {"schema_pattern": "%", "table_pattern": "%"}}'
每个表对象的columns字段里,包含列名、数据类型、是否可为空等信息,直接解析即可。
方式2:GraphQL查询系统表
如果admin角色有权访问information_schema(默认有权限),可直接写GraphQL查询:
query GetAllTableColumns { information_schema_columns( where: {table_schema: {_nin: ["information_schema", "pg_catalog"]}} ) { table_schema table_name column_name data_type is_nullable } }
用curl执行的命令:
curl -X POST https://your-hasura-instance/v1/graphql \ -H "Content-Type: application/json" \ -H "X-Hasura-Admin-Secret: your-admin-secret" \ -d '{"query": "query GetAllTableColumns { information_schema_columns(where: {table_schema: {_nin: [\"information_schema\", \"pg_catalog\"]}}) { table_schema table_name column_name data_type is_nullable } }"}'
三、关于hasura_metadata表的说明
这个表是Hasura内部存储元数据的私有表,官方不对外暴露,且2.x版本中它的结构属于内部实现,随时可能变动,绝对不要直接访问它。使用上述Metadata API才是官方推荐的正确方式。
四、自动化脚本思路
- 用Python/Node.js等脚本语言调用上述API,获取JSON格式数据
- 解析提取角色列表、表和列的信息,转换成你需要的格式(比如Markdown)
- 用Git命令自动将生成的文件提交到GitHub仓库
内容的提问来源于stack exchange,提问作者hpal007
相关产品推荐
相关产品推荐

