Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

34.6. pgtypes 库 #

34.6.1. 字符串
34.6.2. numeric 类型
34.6.3. date 类型
34.6.4. timestamp 类型
34.6.5. interval 类型
34.6.6. decimal 类型
34.6.7. pgtypeslib 的 errno 值
34.6.8. pgtypeslib 的特殊常量

pgtypes 库将 PostgreSQL 数据库类型映射到可用于 C 程序中相应的 C 类型。它还提供了一些函数,以帮助在 C 中对这些类型进行基本计算,即无需借助于 PostgreSQL 服务器。请参阅以下示例

EXEC SQL BEGIN DECLARE SECTION;
   date date1;
   timestamp ts1, tsout;
   interval iv1;
   char *out;
EXEC SQL END DECLARE SECTION;

PGTYPESdate_today(&date1);
EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout);
printf("Started + duration: %s\n", out);
PGTYPESchar_free(out);

34.6.1. 字符串 #

某些函数,如 PGTYPESnumeric_to_asc 返回一个指向新分配的字符串的指针。这些结果应使用 PGTYPESchar_free 释放,而不是 free。(这仅在 Windows 中很重要,这是因为内存分配和释放有时需要由同一库执行。)

34.6.2. 数字类型 #

数字类型如果要进行任意精度的计算。有关 PostgreSQL 服务器中的等效类型,请参见 第 8.1 节。由于任意精度,此变量需要能够动态扩展和收缩。这就是为什么只能通过 PGTYPESnumeric_newPGTYPESnumeric_free 函数在堆上创建数字变量的原因。小数类型与此类似,但精度有限,可以在堆栈和堆上创建。

以下函数可用于处理数字类型

PGTYPESnumeric_new #

请求指向新分配的数字变量的指针。

numeric *PGTYPESnumeric_new(void);
PGTYPESnumeric_free #

释放数字类型,释放其所有内存。

void PGTYPESnumeric_free(numeric *var);
PGTYPESnumeric_from_asc #

从其字符串表示解析数字类型。

numeric *PGTYPESnumeric_from_asc(char *str, char **endptr);

有效格式例如:-2.794+3.44592.49E07-32.84e-4。如果能够成功解析该值,则返回一个有效指针,否则返回空指针。目前,ECPG 始终解析整个字符串,因此它目前不支持将第一个无效字符的地址存储在 *endptr 中。您可以将 endptr 安全地设置为 NULL。

PGTYPESnumeric_to_asc #

返回一个由 malloc 分配的字符串指针,其中包含数字类型 num 的字符串表示。

char *PGTYPESnumeric_to_asc(numeric *num, int dscale);

数字值将使用 dscale 小数位打印,必要时进行舍入。该结果必须使用 PGTYPESchar_free() 释放。

PGTYPESnumeric_add #

将两个数字变量添加到第三个变量中。

int PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result);

该函数将变量 var1var2 添加到结果变量 result 中。该函数在成功时返回 0,在出错时返回 -1。

PGTYPESnumeric_sub #

减掉两个数字变量并在第三个中返回结果。

int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result);

该函数将变量 var2 从变量 var1 中减去。运算结果存储在变量 result 中。该函数在成功时返回 0,在出错时返回 -1。

PGTYPESnumeric_mul #

将两个数字变量相乘并在第三个中返回结果。

int PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result);

该函数将变量 var1var2 相乘。运算结果存储在变量 result 中。该函数在成功时返回 0,在出错时返回 -1。

PGTYPESnumeric_div #

将两个数字变量相除并在第三个中返回结果。

int PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result);

该函数将变量 var1 除以 var2。运算结果存储在变量 result 中。该函数在成功时返回 0,在出错时返回 -1。

PGTYPESnumeric_cmp #

对两个数字变量进行比较。

int PGTYPESnumeric_cmp(numeric *var1, numeric *var2)

此函数将两个数字变量进行比较。如果出错,则返回 INT_MAX。在成功时,该函数会返回三个可能的结果之一

  • 1、如果 var1 大于 var2

  • -1、如果 var1 小于 var2

  • 0、如果 var1var2 相等

PGTYPESnumeric_from_int #

将一个 int 变量转换为数字变量。

int PGTYPESnumeric_from_int(signed int int_val, numeric *var);

此函数接受一个有符号 int 类型变量并将其存储在数字变量 var 中。成功后,返回 0;失败时,返回 -1。

PGTYPESnumeric_from_long #

将一个 long int 变量转换为数字变量。

int PGTYPESnumeric_from_long(signed long int long_val, numeric *var);

此函数接受一个有符号 long int 类型变量并将其存储在数字变量 var 中。成功后,返回 0;失败时,返回 -1。

PGTYPESnumeric_copy #

将一个数字变量复制到另一个数字变量中。

int PGTYPESnumeric_copy(numeric *src, numeric *dst);

此函数将 src 指向的变量的值复制到 dst 指向的变量中。成功时,它返回 0;如果出错,则返回 -1。

PGTYPESnumeric_from_double #

将一个 double 类型变量转换为数字变量。

int  PGTYPESnumeric_from_double(double d, numeric *dst);

此函数接受一个 double 类型的变量并将结果存储在 dst 指向的变量中。成功时返回 0,发生错误时返回 -1。

PGTYPESnumeric_to_double #

将 numeric 类型的变量转换为 double。

int PGTYPESnumeric_to_double(numeric *nv, double *dp)

此函数将 nv 指向的变量中的 numeric 值转换为 dp 指向的 double 变量中。成功时返回 0,发生错误(包括溢出)时返回 -1。溢出时,全局变量 errno 也将设置为 PGTYPES_NUM_OVERFLOW

PGTYPESnumeric_to_int #

将 numeric 类型的变量转换为 int。

int PGTYPESnumeric_to_int(numeric *nv, int *ip);

此函数将 nv 指向的变量中的 numeric 值转换为 ip 指向的整数变量中。成功时返回 0,发生错误(包括溢出)时返回 -1。溢出时,全局变量 errno 也将设置为 PGTYPES_NUM_OVERFLOW

PGTYPESnumeric_to_long #

将 numeric 类型的变量转换为 long。

int PGTYPESnumeric_to_long(numeric *nv, long *lp);

此函数将 nv 指向的变量中的 numeric 值转换为 lp 指向的 long 整数变量中。成功时返回 0,发生错误(包括溢出和下溢)时返回 -1。溢出时,全局变量 errno 将被设置为 PGTYPES_NUM_OVERFLOW,下溢时 errno 将被设置为 PGTYPES_NUM_UNDERFLOW

PGTYPESnumeric_to_decimal #

将 numeric 类型的变量转换为 decimal。

int PGTYPESnumeric_to_decimal(numeric *src, decimal *dst);

此函数将 src 指向的变量中的 numeric 值转换为 dst 指向的 decimal 变量中。成功时返回 0,发生错误(包括溢出)时返回 -1。溢出时,全局变量 errno 也将设置为 PGTYPES_NUM_OVERFLOW

PGTYPESnumeric_from_decimal #

将 decimal 类型的变量转换为 numeric。

int PGTYPESnumeric_from_decimal(decimal *src, numeric *dst);

此函数将 src 指向的变量中的 decimal 值转换为 dst 指向的 numeric 变量中。成功时返回 0,发生错误时返回 -1。由于 decimal 类型被实现为 numeric 类型的精简版,因此在此转换中不会发生溢出。

34.6.3. 日期类型 #

C 中的 date 类型让程序可以处理 SQL 类型为 date 的数据。参阅 第 8.5 节,了解 PostgreSQL 服务器中相等类型的说明。

以下函数可用于处理 date 类型

PGTYPESdate_from_timestamp #

从 timestamp 中提取日期部分。

date PGTYPESdate_from_timestamp(timestamp dt);

该函数仅接收一个 timestamp 作为参数,并从该 timestamp 中提取日期部分。

PGTYPESdate_from_asc #

根据文本内容解析日期。

date PGTYPESdate_from_asc(char *str, char **endptr);

该函数接收 C char* 字符串 str 和指向 C char* 字符串 endptr 的指针。当前,ECPG 始终解析完整字符串,因此它不支持将第一个无效字符的地址存储到 *endptr 中。可以将 endptr 安全地设为 NULL。

请注意,该函数始终假定为 MDY 格式的日期,当前也没有变量可以在 ECPG 中更改该格式。

表 34.2 展示了允许的输入格式。

表 34.2。 PGTYPESdate_from_asc 的有效输入格式

输入 结果
1999 年 1 月 8 日 1999 年 1 月 8 日
1999-01-08 1999 年 1 月 8 日
1/8/1999 1999 年 1 月 8 日
1/18/1999 1999 年 1 月 18 日
01/02/03 2003 年 2 月 1 日
1999-Jan-08 1999 年 1 月 8 日
Jan-08-1999 1999 年 1 月 8 日
08-Jan-1999 1999 年 1 月 8 日
99-Jan-08 1999 年 1 月 8 日
08-Jan-99 1999 年 1 月 8 日
08-Jan-06 2006 年 1 月 8 日
Jan-08-99 1999 年 1 月 8 日
19990108 ISO 8601;1999 年 1 月 8 日
990108 ISO 8601;1999 年 1 月 8 日
1999.008 一年中的年份和日期
J2451187 儒略日
公元前 99 年 1 月 8 日 公元前 99 年

PGTYPESdate_to_asc #

返回日期变量的文本内容。

char *PGTYPESdate_to_asc(date dDate);

该函数仅接收日期变量 dDate 作为参数。它会输出格式为 1999-01-18 的日期,即以 YYYY-MM-DD 格式输出日期。必须通过 PGTYPESchar_free() 释放该结果。

PGTYPESdate_julmdy #

从 date 类型的变量中提取日期、月份和年份的值。

void PGTYPESdate_julmdy(date d, int *mdy);

此函数接受日期 d 和指向包含 3 个整数值的数组 mdy 的指针。变量名表示顺序:mdy[0] 将被设置为包含月份编号,mdy[1] 将被设置为日期值,mdy[2] 将包含年份。

PGTYPESdate_mdyjul #

根据指定日期的日期、月份和年份创建日期值。

void PGTYPESdate_mdyjul(int *mdy, date *jdate);

该函数接收第一个参数中的 3 个整数的数组 (mdy),接收第二个参数中的指向应保存操作结果的日期变量类型。

PGTYPESdate_dayofweek #

返回值表示日期的星期数。

int PGTYPESdate_dayofweek(date d);

该函数接收日期变量 d 作为其唯一参数,并返回一个整数,表示该日期的星期数。

  • 0 - 星期日

  • 1 - 星期一

  • 2 - 星期二

  • 3 - 星期三

  • 4 - 星期四

  • 5 - 星期五

  • 6 - 星期六

PGTYPESdate_today #

获取当前日期。

void PGTYPESdate_today(date *d);

该函数接收日期变量 (d) 的指针,将其设置为当前日期。

PGTYPESdate_fmt_asc #

使用格式掩码将日期变量转换为文本表示形式。

int PGTYPESdate_fmt_asc(date dDate, char *fmtstring, char *outbuf);

该函数接收要转换的日期 (dDate)、格式掩码 (fmtstring) 和将保存日期文本表示形式的字符串 (outbuf)。

成功时,返回 0;发生错误时,返回负值。

以下文字是可用的字段说明符

  • dd - 月份的天数。

  • mm - 年份的月份。

  • yy - 年份,以两位数表示。

  • yyyy - 年份,以四位数表示。

  • ddd - 星期名称(缩写)。

  • mmm - 月份名称(缩写)。

所有其它字符以 1:1 复制到输出字符串。

表 34.3 指示了几种可能的格式。这将向你展示如何使用此功能。所有输出行都是基于同一天期:1959 年 11 月 23 日。

表 34.3.PGTYPESdate_fmt_asc 的有效输入格式

格式 结果
mmddyy 112359
ddmmyy 231159
yymmdd 591123
yy/mm/dd 59/11/23
yy mm dd 59 11 23
yy.mm.dd 59.11.23
.mm.yyyy.dd. .11.1959.23.
mmm. dd, yyyy Nov. 23, 1959
mmm dd yyyy Nov 23 1959
yyyy dd mm 1959 23 11
ddd, mmm. dd, yyyy Mon, Nov. 23, 1959
(ddd) mmm. dd, yyyy (Mon) Nov. 23, 1959

PGTYPESdate_defmt_asc #

使用格式掩码将 C char* 字符串转换成类型为 date 的值。

int PGTYPESdate_defmt_asc(date *d, char *fmt, char *str);

此功能接收应该保存此操作结果的 date 值的指针(d)、用于解析日期的格式掩码(fmt)以及包含日期文本表示形式的 C char* 字符串(str)。文本表示形式应该与格式掩码匹配。但是你不必对字符串和格式掩码进行 1:1 的映射。此功能只分析顺序,并寻找指示年份位置的文本 yyyyyy、指示月份位置的 mm 和指示日期位置的 dd

表 34.4 指示了几种可能的格式。这将向你展示如何使用此功能。

表 34.4.rdefmtdate 的有效输入格式

格式 字符串 结果
ddmmyy 21-2-54 1954-02-21
ddmmyy 2-12-54 1954-12-02
ddmmyy 20111954 1954-11-20
ddmmyy 130464 1964-04-13
mmm.dd.yyyy MAR-12-1967 1967-03-12
yy/mm/dd 1954, February 3rd 1954-02-03
mmm.dd.yyyy 041269 1969-04-12
yy/mm/dd In the year 2525, in the month of July, mankind will be alive on the 28th day 2525-07-28
dd-mm-yy I said on the 28th of July in the year 2525 2525-07-28
mmm.dd.yyyy 9/14/58 1958-09-14
yy/mm/dd 47/03/29 1947-03-29
mmm.dd.yyyy oct 28 1975 1975-10-28
mmddyy Nov 14th, 1985 1985-11-14

34.6.4. 时间戳类型 #

C 中的时间戳类型让你的程序能够处理 SQL 类型 timestamp 的数据。有关 PostgreSQL 服务器中的同等类型,请参见 第 8.5 节

可以使用以下函数处理时间戳类型

PGTYPEStimestamp_from_asc #

将时间戳从其文本表示形式解析至一个时间戳变量。

timestamp PGTYPEStimestamp_from_asc(char *str, char **endptr);

此函数接收待解析的字符串(str)以及一个 C char* 指针(endptr)。目前 ECPG 始终解析完整的字符串,因此当前不支持将第一个无效字符的地址存储在 *endptr 中。您可以将 endptr 安全地设置为 NULL。

此函数在成功时返回解析的时间戳。发生错误时,将返回 PGTYPESInvalidTimestamp,并将 errno 设置为 PGTYPES_TS_BAD_TIMESTAMP。有关此值的重要说明,请参见 PGTYPESInvalidTimestamp

一般来说,输入字符串可以包含允许的日期规范、空白字符和允许的时间规范的任意组合。请注意,ECPG 不支持时区。它可以解析它们,但不执行任何计算,例如 PostgreSQL 服务器执行的计算。时区说明符将被静默丢弃。

表 34.5 包含几个输入字符串示例。

表 34.5。PGTYPEStimestamp_from_asc 的有效输入格式

输入 结果
1999-01-08 04:05:06 1999-01-08 04:05:06
1999 年 1 月 8 日 04:05:06 PST 1999-01-08 04:05:06
1999-01-08 04:05:06.789-8 1999-01-08 04:05:06.789(忽略时区说明符)
J2451187 04:05-08:00 1999-01-08 04:05:00(忽略时区说明符)

PGTYPEStimestamp_to_asc #

将日期转换为 C char* 字符串。

char *PGTYPEStimestamp_to_asc(timestamp tstamp);

此函数接收时间戳 tstamp 作为其唯一的参数,并返回一个已分配的字符串,其中包含时间戳的文本表示形式。结果必须使用 PGTYPESchar_free() 释放。

PGTYPEStimestamp_current #

检索当前时间戳。

void PGTYPEStimestamp_current(timestamp *ts);

此函数检索当前时间戳,并将其保存到时间戳变量 ts 所指向的位置。

PGTYPEStimestamp_fmt_asc #

使用格式掩码将时间戳变量转换为 C char*。

int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, char *fmtstr);

此函数接收要转换的时间戳的指针作为其第一个参数(ts)、输出缓冲区的指针(output)、已为输出缓冲区分配的最大长度(str_len)以及用于转换的格式掩码 (fmtstr)。

成功时,此函数返回 0,如果发生错误,则返回负值。

您可以对格式掩码使用以下格式说明符。格式说明符与 libcstrftime 函数中使用的格式说明符相同。任何非格式说明符都将复制到输出缓冲区。

  • %A - 由完全星期名称的国家表示形式替代。

  • %a - 被缩写的星期名国家表示形式替换。

  • %B - 被完整月份名国家表示形式替换。

  • %b - 被缩写的月份名国家表示形式替换。

  • %C - 被 (年份 / 100) 替换,作为十进制数;个位数前加零。

  • %c - 被时间和日期国家表示形式替换。

  • %D - 等同于 %m/%d/%y

  • %d - 被月份的日期替换,作为十进制数 (01–31)。

  • %E* %O* - POSIX 区域扩展。以下序列 %Ec %EC %Ex %EX %Ey %EY %Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy 预计提供备用表示。

    此外 %OB 实现在表示备用月份名称(独立使用,不提日期)。

  • %e - 被月份的日期替换,作为十进制数 (1–31);个位数前加空格。

  • %F - 等同于 %Y-%m-%d

  • %G - 被包含世纪的十进制年代数替换。此年为包含星期大部日期的年份(星期一为星期中的第一天)。

  • %g - 被与 %G 中相同的年代替换,但作为没有世纪的十进制数 (00–99)。

  • %H - 被 24 小时制时间替换,作为十进制数 (00–23)。

  • %h - 与 %b 相同。

  • %I - 被 12 小时制时间替换,作为十进制数 (01–12)。

  • %j - 被年份中的日期替换,作为十进制数 (001–366)。

  • %k - 被 24 小时制时间替换,作为十进制数 (0–23);个位数前加空格。

  • %l - 被 12 小时制时间替换,作为十进制数 (1–12);个位数前加空格。

  • %M - 被分钟数替换,作为十进制数 (00–59)。

  • %m - 被月份替换,作为十进制数 (01–12)。

  • %n - 被换行符替换。

  • %O* - 与 %E* 相同。

  • %p - 使用适当的国家/地区格式替换为 上午下午

  • %R - 与 %H:%M 相同。

  • %r - 与 %I:%M:%S %p 相同。

  • %S - 用小数(00-60)替换为秒。

  • %s - 用自 UTC 历元以来的秒数替换。

  • %T - 与 %H:%M:%S 相同

  • %t - 用制表符替换。

  • %U - 用一小数(00-53)替换为一年中的周数(周日为一周的第一天)。

  • %u - 用一小数(1-7)替换为星期几(周一为一周的第一天)。

  • %V - 用一小数(01-53)替换为一年中的周数(周一为一周的第一天)。如果包含 1 月 1 日的一周在新的一年中包含至少四天,则它为第 1 周;否则,它为上一年的最后一周,而下一周为第 1 周。

  • %v - 与 %e-%b-%Y 相同。

  • %W - 用一小数(00-53)替换为一年中的周数(周一为一周的第一天)。

  • %w - 用一小数(0-6)替换为星期几(周日为一周的第一天)。

  • %X - 用时间的国家/地区格式替换。

  • %x - 用日期的国家/地区格式替换。

  • %Y - 用一个小数替换为带有世纪的年份。

  • %y - 用一个小数(00-99)替换为没有世纪的年份。

  • %Z - 用时区名称替换。

  • %z - 用与 UTC 的时差替换;前导加号表示 UTC 以东,减号表示 UTC 以西,小时和分钟分别用两位数字表示,其间没有分隔符(RFC 822 日期标题的常见形式)。

  • %+ - 用日期和时间的国家/地区格式替换。

  • %-* - GNU libc 的扩展。执行数字输出时不执行任何填充。

  • $_* - GNU libc 的扩展。明确指定填充空间。

  • %0* - GNU libc 扩展。显式指定零作为填充。

  • %% - 被替换为 %

PGTYPEStimestamp_sub #

从另一个时间戳减去一个时间戳,并将结果保存到 interval 类型的变量中。

int PGTYPEStimestamp_sub(timestamp *ts1, timestamp *ts2, interval *iv);

该函数会从 ts1 指向的时间戳变量中减去 ts2 指向的时间戳变量,并将结果存储到 iv 指向的 interval 变量中。

成功时,此函数返回 0,如果发生错误,则返回负值。

PGTYPEStimestamp_defmt_asc #

使用格式化掩码从文本表示中解析时间戳值。

int PGTYPEStimestamp_defmt_asc(char *str, char *fmt, timestamp *d);

该函数在变量 str 中接收时间戳的文本表示以及在变量 fmt 中使用的格式化掩码。结果将存储到 d 指向的变量中。

如果格式化掩码 fmt 为 NULL,函数将回退到默认的格式化掩码,即 %Y-%m-%d %H:%M:%S

这是 PGTYPEStimestamp_fmt_asc 的反向函数。请参阅其中的文档以了解可能的格式化掩码条目。

PGTYPEStimestamp_add_interval #

将 interval 变量添加到时间戳变量中。

int PGTYPEStimestamp_add_interval(timestamp *tin, interval *span, timestamp *tout);

该函数接收一个指向时间戳变量 tin 的指针和一个指向 interval 变量 span 的指针。它将 interval 添加到时间戳,并将结果时间戳保存到 tout 指向的变量中。

成功时,此函数返回 0,如果发生错误,则返回负值。

PGTYPEStimestamp_sub_interval #

从时间戳变量中减去一个 interval 变量。

int PGTYPEStimestamp_sub_interval(timestamp *tin, interval *span, timestamp *tout);

该函数从 tin 指向的时间戳变量中减去 span 指向的 interval 变量,并将结果保存到 tout 指向的变量中。

成功时,此函数返回 0,如果发生错误,则返回负值。

34.6.5. interval 类型 #

C 中的 interval 类型使你的程序能够处理 SQL 类型 interval 的数据。请参阅 第 8.5 节 以了解 PostgreSQL 服务器中的等效类型。

可以使用以下函数处理 interval 类型

PGTYPESinterval_new #

返回一个新分配的 interval 变量的指针。

interval *PGTYPESinterval_new(void);
PGTYPESinterval_free #

释放先前分配的间隔变量的内存。

void PGTYPESinterval_free(interval *intvl);
PGTYPESinterval_from_asc #

从其文本表示形式分析间隔。

interval *PGTYPESinterval_from_asc(char *str, char **endptr);

此函数分析输入字符串 str 并且返回对已分配的间隔变量的指针。目前 ECPG 总会分析完整的字符串,因此当前不支持将第一个无效字符的地址存储在 *endptr 中。您可以安全地将 endptr 设置为 NULL。

PGTYPESinterval_to_asc #

将 `interval` 类型的变量转换为其文本表示形式。

char *PGTYPESinterval_to_asc(interval *span);

函数转换 span 指向的间隔变量到 C char*。输出像以下示例一样:@ 1 day 12 hours 59 mins 10 secs。结果必须用 PGTYPESchar_free() 释放。

PGTYPESinterval_copy #

复制 `interval` 类型的变量。

int PGTYPESinterval_copy(interval *intvlsrc, interval *intvldest);

该函数将 intvlsrc 指向的间隔变量复制到 intvldest 指向的变量。注意,你需要事先为目标变量分配内存。

34.6.6. 十进制类型 #

十进制类型类似于数字类型。不过,它的最大精度限制为 30 个有效数字。不同于只能在堆上创建的数字类型,十进制类型既可以在堆上创建,也可以在栈上创建(通过函数 PGTYPESdecimal_newPGTYPESdecimal_free)。还有许多其他在 Informix 兼容模式中处理十进制类型的函数,如 第 34.15 节 所述。

下列函数可用于处理十进制类型,并且不只包含在 libcompat 库中。

PGTYPESdecimal_new #

申请一个新分配的十进制变量的指针。

decimal *PGTYPESdecimal_new(void);
PGTYPESdecimal_free #

释放十进制类型,释放所有内存。

void PGTYPESdecimal_free(decimal *var);

34.6.7. pgtypeslib 的 errno 值 #

PGTYPES_NUM_BAD_NUMERIC #

一个参数应该包含一个数字变量(或指向一个数字变量),但实际上它的内存表示是无效的。

PGTYPES_NUM_OVERFLOW #

发生了溢出。因为数字类型几乎可以处理任意精度,所以将数字变量转换为其他类型可能会导致溢出。

PGTYPES_NUM_UNDERFLOW #

发生了下溢。因为数字类型几乎可以处理任意精度,所以将数字变量转换为其他类型可能会导致下溢。

PGTYPES_NUM_DIVIDE_ZERO #

已尝试除以零。

PGTYPES_DATE_BAD_DATE #

将一个无效的日期字符串传递给了 PGTYPESdate_from_asc 函数。

PGTYPES_DATE_ERR_EARGS #

将无效的参数传递给了 PGTYPESdate_defmt_asc 函数。

PGTYPES_DATE_ERR_ENOSHORTDATE #

PGTYPESdate_defmt_asc 函数在输入字符串中找到了一个无效的标记。

PGTYPES_INTVL_BAD_INTERVAL #

将一个无效的间隔字符串传递给了 PGTYPESinterval_from_asc 函数,或者将一个无效的间隔值传递给了 PGTYPESinterval_to_asc 函数。

PGTYPES_DATE_ERR_ENOTDMY #

PGTYPESdate_defmt_asc 函数中,在日/月/年的分配中存在不匹配的情况。

PGTYPES_DATE_BAD_DAY #

PGTYPESdate_defmt_asc 函数找到了一个无效的月份天数的值。

PGTYPES_DATE_BAD_MONTH #

PGTYPESdate_defmt_asc 函数找到了一个无效的月份的值。

PGTYPES_TS_BAD_TIMESTAMP #

将一个无效的时间戳字符串传递给了 PGTYPEStimestamp_from_asc 函数,或者将一个无效的时间戳值传递给了 PGTYPEStimestamp_to_asc 函数。

PGTYPES_TS_ERR_EINFTIME #

在无法处理它的上下文中遇到了一个无限的时间戳值。

34.6.8. pgtypeslib 的特殊常量 #

PGTYPESInvalidTimestamp #

一个表示无效时间戳的 timestamp 类型的值。这是由 PGTYPEStimestamp_from_asc 函数在解析错误时返回的。请注意,由于 timestamp 数据类型的内部表示,PGTYPESInvalidTimestamp 同时也是一个有效时间戳。它被设置为 1899-12-31 23:59:59。为了检测错误,请确保您的应用程序不仅针对 PGTYPESInvalidTimestamp 进行测试,而且在每次调用 PGTYPEStimestamp_from_asc 后针对 errno != 0 进行测试。