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-“\”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章