Npgsql Exception-“\”处或附近的语法错误

Posted

技术标签:

【中文标题】Npgsql Exception-“\\”处或附近的语法错误【英文标题】:Npgsql Exception- syntax error at or near "\"Npgsql Exception-“\”处或附近的语法错误 【发布时间】:2017-12-10 11:11:07 【问题描述】:

我正在尝试执行 postgresql 查询 (\list) 以使用 npsql 获取数据库列表。

string postgresQuery = @"\list"; 
            ICollection<Schema> schemas = new List<Schema>();
            string ConnectionString =
"Host=xxx;Username=postgres;Password=admin;Database=test;";
            NpgsqlConnection conn = new NpgsqlConnection(ConnectionString);
            NpgsqlCommand cmd = new NpgsqlCommand(postgresQuery, conn);
            conn.Open();
   NpgsqlDataReader dataReader = cmd.ExecuteReader();

在执行查询时遇到“在“\”处或附近出现语法错误”的问题。该字符串包含如下所示的双斜杠 (\list) 而不是单斜杠 (\list)。请让我知道是否有任何解决方案。提前致谢。

【问题讨论】:

\list 不是有效的 SQL 查询。这是psql-tool命令 Show tables in PostgreSQL的可能重复 【参考方案1】:

\list 不是 SQL 查询。这是psql-tool 的命令。

要使用 SQL 获取所有数据库的列表,请使用以下查询:

SELECT datname FROM pg_database
WHERE datistemplate = false;

查看How do I list all databases and tables using psql?

pg_database 表的字段描述为here

数据库的所有者存储在引用pg_authid 表的datdba 字段中。可以找到用户拥有的所有数据库,如How to list databases owned by rolename in postgresql 中的

SELECT datname 
FROM pg_database 
JOIN pg_authid ON pg_database.datdba = pg_authid.oid 
WHERE rolname = 'username'

当然,查询应该是参数化的:

SELECT datname 
FROM pg_database 
JOIN pg_authid ON pg_database.datdba = pg_authid.oid 
WHERE rolname = :username

pg_authid 被描述为here

【讨论】:

感谢您的更新。这列出了所有数据库。但我只需要用户创建的数据库,而不是 PostgreSQL 中的所有数据库。请告诉我是否可以获得用户创建的唯一数据库。 这是datdba 字段。您可以将其用作查询中的过滤器,或加入pg_authid 表。 .查看pg_database 和pg_authid 文档页面

以上是关于Npgsql Exception-“\”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql:“-”处或附近的语法错误

在“PARALLEL”处或附近创建 postgis 扩展语法错误

错误:“用户”处或附近的语法错误

无效操作:“Delta”处或附近的语法错误

postgresql 错误:“返回”处或附近的语法错误

错误:“修改”处或附近的语法错误 - 在 postgres