繁体   English   中英

使用group by时npgsql数据类型未知

[英]npgsql data type unknown when using group by

我有2张桌子:

CREATE TABLE "book" 
(
  "id" serial PRIMARY KEY, 
  "ean_number" TEXT NULL, 
  "title" TEXT NULL 
); 

CREATE TABLE "e_book" 
(
  "id" serial PRIMARY KEY, 
  "ean" TEXT NULL, 
  "title" TEXT NULL, 
  "format" VARCHAR(255) NOT NULL, 
  "physical_book_ean" TEXT NULL 
); 

书籍与电子书之间存在一对多或没有关系。

我想在我的代码中运行这样的查询:

var q = "select b.*, array_agg(e) ebooks from book b " +
         "left join e_book e on e.physical_book_ean = b.ean_number " +
         "group by b.id";

using (var cmd = new NpgsqlCommand(q, conn))
using (var reader = cmd.ExecuteReader())
    while (reader.Read())
    {
        //read data
    }

array_agg列电子书以内容类型<unknown>

如何定义内容类型以便可以阅读?

这是作为github问题打开的: https : //github.com/npgsql/npgsql/issues/2510

答案如下:

首先,如果创建e_book表并以相同的过程对其进行查询,则需要告诉Npgsql重新加载数据库类型定义。 这是因为当Npgsql首次连接到数据库时,它会加载类型列表并对其进行缓存-但那时e_book类型尚不存在。 如果您使用已经存在的表再次运行应用程序,则应该不再有此问题,或者可以调用Npgsql.ReloadTypes()。

其次,您将需要在连接字符串上传递LoadTableComposites = true标志,告诉Npgsql加载所有复合类型-包括与表相对应的复合类型。 默认情况下,Npgsql不会执行此操作,因为表的数量可能很大,并且在某些情况下会影响启动性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM