You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Npgsql.NET与PostgreSQL中查询相似名称的表?

解决PostgreSQL中查询名称相似表的问题
  • 你之前用的\dt是PostgreSQL交互式客户端psql的专属元命令,不是标准SQL语句,直接通过Npgsql执行必然报语法错误,这是核心问题。
  • 要在C#代码中实现类似MySQLSHOW TABLES LIKE的功能,需要查询PostgreSQL的系统视图,推荐两种实用方式:

方法1:查询information_schema.tables(标准SQL兼容)

这是SQL标准定义的视图,跨数据库兼容性更好:

await connection.OpenAsync();
// ILIKE实现不区分大小写匹配,LIKE为区分大小写匹配
string searchPattern = $"%{tbSearch.Text}%";
string query = @"
    SELECT table_name 
    FROM information_schema.tables 
    WHERE table_schema = 'public' -- 指定查询的模式,默认通常为public
      AND table_name ILIKE @pattern;";
NpgsqlCommand command = new NpgsqlCommand(query, connection);
command.Parameters.AddWithValue("@pattern", searchPattern);

// 读取查询结果
using (var reader = await command.ExecuteReaderAsync())
{
    while (await reader.ReadAsync())
    {
        string tableName = reader.GetString(0);
        // 此处处理获取到的表名
    }
}

方法2:查询pg_catalog.pg_tables(PostgreSQL专属)

这是PostgreSQL自带的系统表,能获取更全面的表元数据:

await connection.OpenAsync();
string searchPattern = $"%{tbSearch.Text}%";
string query = @"
    SELECT tablename 
    FROM pg_catalog.pg_tables 
    WHERE schemaname = 'public'
      AND tablename ILIKE @pattern;";
NpgsqlCommand command = new NpgsqlCommand(query, connection);
command.Parameters.AddWithValue("@pattern", searchPattern);

// 读取结果逻辑同上
  • 匹配规则调整:如果需要前缀匹配,把%{tbSearch.Text}%改成{tbSearch.Text}%;后缀匹配则改成%{tbSearch.Text},和MySQL的LIKE语法逻辑一致。
  • 关于使用体验:PostgreSQL和MySQL设计思路差异明显,刚切换确实会有适应期。MySQL的SHOW系列是专属语法,而PostgreSQL更偏向用标准SQL查询系统视图获取元数据,习惯后会发现这种方式灵活性更强。

内容的提问来源于stack exchange,提问作者ZiAD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:30:50