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。
创建表。 提交该交易。
然后在单独的事务中插入数据。