Npgsql我得到:42P01:关系" sometable"不存在

时间:2015-10-01 11:13:15

标签: c# postgresql npgsql

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

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

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

        var m_createdb_cmd = new NpgsqlCommand();
        m_createdb_cmd.Connection = _connPg;
        m_createdb_cmd.CommandText = psSQL;
        _connPg.Open();
        m_createdb_cmd.ExecuteNonQuery();
        _connPg.Close();

查询

BEGIN;
CREATE TABLE "sometable" (
"test" varchar(254));
INSERT INTO "sometable" ("test") VALUES ('Hello World');
COMMIT;

日志

2015-10-01 07:08:46 EDT ERROR:关系" sometable"字符13不存在 2015-10-01 07:08:46 EDT声明:INSERT INTO" sometable" ("测试")价值观(' Hello World')

p.s.:i'还看了PostgreSQL ERROR: 42P01: relation "[Table]" does not exist无效

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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