Npgsql异常 - 语法错误在“\”附近

时间:2017-07-06 12:32:21

标签: c# postgresql npgsql

我正在尝试执行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)。如果有任何解决方案,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分: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

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

所示
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