.NET连接AWS Redshift Serverless无法查看手动创建的表
问题解决方法
1. 修正SchemaPattern匹配规则
代码里SchemaPattern = "%public"采用的是PostgreSQL LIKE语法,会匹配以public结尾的模式,而public是精确模式名,需调整为精确匹配或正确的通配符规则:
ListTablesRequest listTables = new ListTablesRequest(); listTables.WorkgroupName = "preview"; listTables.Database = "dev"; listTables.SchemaPattern = "public"; // 精确匹配public模式 // 若需模糊匹配包含public的模式,可改为 "%public%"
2. 检查数据库用户权限
Redshift Data API调用时的IAM角色会映射到对应数据库用户,该用户必须具备访问public模式和name表的权限:
登录Redshift查询编辑器,执行以下授权语句(替换<your_db_user>为Data API对应的数据库用户):
-- 授予public模式的使用权限 GRANT USAGE ON SCHEMA public TO <your_db_user>; -- 授予name表的访问权限 GRANT SELECT ON TABLE public.name TO <your_db_user>;
若需让该用户自动获取后续新建表的权限,可追加:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO <your_db_user>;
3. 确认表的所有者与可见性
手动创建的表默认仅所有者和超级用户可见,若Data API对应的用户不是表所有者,可通过以下方式处理:
- 查看表所有者:
SELECT tableowner FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'name';
- 修改表所有者(可选):
ALTER TABLE public.name OWNER TO <your_db_user>;
4. 优化异步调用代码(可选)
调整异步调用写法,避免潜在线程问题:
using Amazon.RedshiftDataAPIService; using Amazon.RedshiftDataAPIService.Model; var client = new AmazonRedshiftDataAPIServiceClient(Amazon.RegionEndpoint.USEast1); // 列出数据库 var listDatabaseResp = await client.ListDatabasesAsync(new ListDatabasesRequest { WorkgroupName = "preview", Database = "dev" }); // 列出模式 var listSchemasResp = await client.ListSchemasAsync(new ListSchemasRequest { WorkgroupName = "preview", Database = "dev" }); // 列出表 var listTablesResp = await client.ListTablesAsync(new ListTablesRequest { WorkgroupName = "preview", Database = "dev", SchemaPattern = "public" }); foreach (var table in listTablesResp.Tables) { if (table.Name == "name") { Console.WriteLine("found"); } } Console.ReadLine();
内容的提问来源于stack exchange,提问作者hubertcyNinja
相关产品推荐
相关产品推荐

