如何识别C中的PostgreSQL区间类型?

如何识别C中的PostgreSQL区间类型?,postgresql,Postgresql,我有一个使用VS 2012用C编写的应用程序,需要在运行时确定PostgreSQL查询结果中包含的数据类型。例如,命令对象被设置为从my_表执行select*。对于返回的读取器中的每个字段,都会将一行写入一个文件,其结果如下所示: my_table.field1 is an integer my_table.field2 is a real my_table.field3 is a timestamp 问题在于包含间隔的字段。使用最新的PostgreSQL ODBC驱动程序和NPGSQL,包含

我有一个使用VS 2012用C编写的应用程序,需要在运行时确定PostgreSQL查询结果中包含的数据类型。例如,命令对象被设置为从my_表执行select*。对于返回的读取器中的每个字段,都会将一行写入一个文件,其结果如下所示:

my_table.field1 is an integer
my_table.field2 is a real
my_table.field3 is a timestamp

问题在于包含间隔的字段。使用最新的PostgreSQL ODBC驱动程序和NPGSQL,包含间隔的字段将被读取,就像它包含文本一样。我可以使用TimeSpan.Parse方法查看字段中的数据是否可以映射到TimeSpan,但我觉得这违反了基本的数据库原则。C应用程序是否有办法直接确定DataReader对象中包含的字段的类型为interval?

很晚才这样做,但您始终可以使用DbDataReader.GetTypeName来获取数据库类型的名称。

很抱歉,您选择了错误的语言来执行此操作。C是强类型的lang,因此需要事先知道查询返回的字段的类型。在c上使用类似SELECT*的东西违反了这一原则。这就是我在问这样的问题时所说的,我的应用程序生成包装代码,这些代码在C或C++中构建类,用于我的公司所写的其他应用程序中。因此,我需要能够区分间隔和普通文本字段之间的区别。是的,我知道有实体框架之类的东西可以做这种事情,但我们已经有了手工编写的包装器类,我的工具遵循为它们建立的模式。这里有一个问题和答案,它为我提供了一种做我想做的事情的替代方法:唯一的问题是它只适用于已经定义的结构、表或视图。我的工具的现有版本就是这样工作的,我可能会修改它以使用这种技术。然而,我希望能够从任意查询中确定字段类型;理想情况下,它应该为PostgreSQL间隔类型返回自定义类的实例。