关于c#:Npgsql我得到:42P01:关系“sometable”不存在

Npgsql i get: 42P01: relation “sometable” does not exist

我试图通过Npgsql运行此查询,这个查询工作得很好,当我直接在服务器上运行,因为我得到:查询成功返回成功,没有结果在15毫秒。但是,当我使用Npgsql我得到:42P01:关系"sometable" 不存在

我知道错误是在INSERT语句中,我错过了什么?

连接字符串:Host = 192.168.137.47; Port = 5432; UserId = postgres; Password = test; Database = pg_database;

1
2
3
4
5
6
        var m_createdb_cmd = new NpgsqlCommand();
        m_createdb_cmd.Connection = _connPg;
        m_createdb_cmd.CommandText = psSQL;
        _connPg.Open();
        m_createdb_cmd.ExecuteNonQuery();
        _connPg.Close();

查询

1
2
3
4
5
BEGIN;
CREATE TABLE"sometable" (
"test" varchar(254));
INSERT INTO"sometable" ("test") VALUES ('Hello World');
COMMIT;

日志

2015-10-01 07:08:46 EDT ERROR:角色13中不存在关系"sometable"
2015-10-01 07:08:46 EDT声明:插入"sometable"("测试")VALUES('Hello World')

p.s.:我也看过PostgreSQL错误:42P01:关系"[表]"不存在没有帮助


这是由于Npgsql 3.x中引入的已知限制 - 当在一个命令中发送多个SQL语句时,后面的语句不再依赖于在先前语句中创建的实体。 例如,您无法创建表,然后在同一命令中插入表。 解决方法是简单地将表创建和插入拆分为两个命令(请注意,这与事务无关)。

跟踪此问题的问题是https://github.com/npgsql/npgsql/issues/641。


创建表。 提交该交易。
然后在单独的事务中插入数据。