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