PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

34.6. pgtypes 基础类型函数库 #

34.6.1. Character Strings
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 服务器的帮助即可完成。

34.6.1. Character Strings #

某些函数(例如 PGTYPESnumeric_to_asc) 会返回一个指向新分配的字符串的指针。 这些结果应当用 PGTYPESchar_free 而不是 free 来释放。 (这一点很重要,因为在 Windows 上, 只有当可执行文件和库都使用相同的内存分配函数 来分配和释放内存时,它才能工作。)

34.6.2. numeric 类型 #

numeric 类型支持任意精度的计算。 服务器中与之等价的类型见 Section 8.1。 由于精度是任意的,这个变量需要分配的内存大小是可变的。 因此只能在堆上创建 numeric 类型的变量。 变量 numeric 类型的变量是用 PGTYPESnumeric_new 和 PGTYPESnumeric_free 函数创建和释放的。

以下函数可用于操作 numeric 类型:

PGTYPESnumeric_new #

请求一个指向新分配的 numeric 变量的指针。

numeric *PGTYPESnumeric_new(void);

PGTYPESnumeric_free #

释放一个 numeric 类型,回收它的全部内存。

void PGTYPESnumeric_free(numeric *var);

PGTYPESnumeric_from_asc #

从一个 numeric 类型的字符串表示解析出该类型。

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

有效的格式例如: -2、 .794、 +3.44、 592.49E07 或 -32.84e-4。 如果该值能被成功解析,则返回一个有效指针,否则返回 NULL 指针。目前 ECPG 总是解析整个字符串,因此它当前不支持把第一个 无效字符的地址存入 *endptr。你可以放心地把 endptr 设置为 NULL。

PGTYPESnumeric_to_asc #

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

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

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

PGTYPESnumeric_add #

把两个 numeric 变量相加,结果存入第三个变量。

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

该函数把变量 var1 和 var2 相加,存入结果变量 result。 该函数成功时返回 0,出错时返回 -1。

PGTYPESnumeric_sub #

把两个 numeric 变量相减,结果存入第三个变量。

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

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

PGTYPESnumeric_mul #

把两个 numeric 变量相乘,结果存入第三个变量。

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

该函数把变量 var1 和 var2 相乘。操作结果存储在变量 result 中。 该函数成功时返回 0,出错时返回 -1。

PGTYPESnumeric_div #

把两个 numeric 变量相除,结果存入第三个变量。

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

该函数用变量 var2 除变量 var1。操作结果存储在变量 result 中。 该函数成功时返回 0,出错时返回 -1。

PGTYPESnumeric_cmp #

比较两个 numeric 变量。

int PGTYPESnumeric_cmp(numeric *var1, numeric *var2)

该函数比较两个 numeric 变量。出错时返回 INT_MAX。成功时,该函数返回以下三种可能 结果之一:

  • 1,如果 var1 大于 var2

  • -1,如果 var1 小于 var2

  • 0,如果 var1 与 var2 相等

PGTYPESnumeric_from_int #

把一个 int 变量转换为一个 numeric 变量。

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

该函数接受一个 signed int 类型的变量,并把它存储在 numeric 变量 var 中。成功时返回 0, 失败时返回 -1。

PGTYPESnumeric_from_long #

把一个 long int 变量转换为一个 numeric 变量。

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

该函数接受一个 signed long int 类型的变量,并把它存储在 numeric 变量 var 中。成功时返回 0, 失败时返回 -1。

PGTYPESnumeric_copy #

把一个 numeric 变量的值复制到另一个变量中。

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

该函数把 src 所指向变量的值复制到 dst 所指向的变量中。成功时返回 0, 发生错误时返回 -1。

PGTYPESnumeric_from_double #

把一个 double 类型的变量转换为一个 numeric。

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 所指向的长整数变量。成功时返回 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. date 类型 #

C 中的 date 类型使你的程序能够处理 SQL 类型 date 的数据。服务器中与之等价的类型见 Section 8.5。

以下函数可用于操作 date 类型:

PGTYPESdate_from_timestamp #

从一个时间戳中提取日期部分。

date PGTYPESdate_from_timestamp(timestamp dt);

该函数以一个时间戳作为其唯一参数, 并返回从这个时间戳中提取的日期部分。

PGTYPESdate_from_asc #

从日期的文本表示解析出一个日期。

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

该函数接收一个 C char* 字符串 str 和一个指向 C char* 字符串的指针 endptr。 目前 ECPG 总是解析整个字符串, 因此它当前不支持把第一个无效字符的地址存入 *endptr。 你可以安全地把 endptr 设为 NULL。

注意,该函数总是假定日期是 MDY 格式的, 目前 ECPG 中没有可以改变这一行为的变量。

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

Table 34.2. Valid Input Formats for PGTYPESdate_from_asc

InputResult
January 8, 1999January 8, 1999
1999-01-08January 8, 1999
1/8/1999January 8, 1999
1/18/1999January 18, 1999
01/02/03February 1, 2003
1999-Jan-08January 8, 1999
Jan-08-1999January 8, 1999
08-Jan-1999January 8, 1999
99-Jan-08January 8, 1999
08-Jan-99January 8, 1999
08-Jan-06January 8, 2006
Jan-08-99January 8, 1999
19990108ISO 8601; January 8, 1999
990108ISO 8601; January 8, 1999
1999.008year and day of year
J2451187Julian day
January 8, 99 BCyear 99 before the Common Era

PGTYPESdate_to_asc #

返回一个 date 变量的文本表示。

char *PGTYPESdate_to_asc(date dDate);

该函数以 date 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 #

用一个指定日期的日、月、年的 3 个整数的数组 创建一个 date 值。

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

该函数以 3 个整数组成的数组(mdy) 作为第一个参数,并以一个指向 date 类型变量的指针 作为第二个参数,该变量将保存这一操作的结果。

PGTYPESdate_dayofweek #

返回一个表示 date 值是星期几的数字。

int PGTYPESdate_dayofweek(date d);

该函数以 date 变量 d 作为其唯一参数, 并返回一个指出该日期是星期几的整数。

  • 0 - 星期日

  • 1 - Monday

  • 2 - Tuesday

  • 3 - Wednesday

  • 4 - Thursday

  • 5 - Friday

  • 6 - Saturday

PGTYPESdate_today #

获取当前日期。

void PGTYPESdate_today(date *d);

该函数接收一个指向 date 变量(d)的指针, 并把它设置为当前日期。

PGTYPESdate_fmt_asc #

使用一个格式掩码把一个 date 类型的变量 转换为它的文本表示。

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

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

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

以下字面值是你可用的字段说明符:

  • dd - 月份中日的编号。

  • mm - 一年中月份的编号。

  • yy - 两位数字表示的年份。

  • yyyy - 四位数字表示的年份。

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

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

All other characters are copied 1:1 to the output string.

Table 34.3 给出了几种可能的格式。 这能让你了解如何使用这个函数。 所有输出行都基于同一个日期:1959 年 11 月 23 日。

Table 34.3. Valid Input Formats for PGTYPESdate_fmt_asc

FormatResult
mmddyy112359
ddmmyy231159
yymmdd591123
yy/mm/dd59/11/23
yy mm dd59 11 23
yy.mm.dd59.11.23
.mm.yyyy.dd..11.1959.23.
mmm. dd, yyyyNov. 23, 1959
mmm dd yyyyNov 23 1959
yyyy dd mm1959 23 11
ddd, mmm. dd, yyyyMon, 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)以及要解析的日期字符串 (str)。

Table 34.4 给出了几种可能的格式。 这能让你了解如何使用这个函数。

Table 34.4. Valid Input Formats for rdefmtdate

FormatStringResult
ddmmyy21-2-541954-02-21
ddmmyy2-12-541954-12-02
ddmmyy201119541954-11-20
ddmmyy1304641964-04-13
mmm.dd.yyyyMAR-12-19671967-03-12
yy/mm/dd1954, February 3rd1954-02-03
mmm.dd.yyyy0412691969-04-12
yy/mm/ddIn the year 2525, in the month of July, mankind will be alive on the 28th day2525-07-28
dd-mm-yyI said on the 28th of July in the year 25252525-07-28
mmm.dd.yyyy9/14/581958-09-14
yy/mm/dd47/03/291947-03-29
mmm.dd.yyyyoct 28 19751975-10-28
mmddyyNov 14th, 19851985-11-14

34.6.4. timestamp 类型 #

C 中的 timestamp 类型使你的程序能够处理 SQL 类型 timestamp 的数据。服务器中与之等价的类型见 Section 8.5。

以下函数可用于操作 timestamp 类型:

PGTYPEStimestamp_from_asc #

把一个时间戳从其文本表示解析到一个时间戳变量中。

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

该函数在成功时返回解析出的时间戳。出错时, 会返回 PGTYPESInvalidTimestamp, 并把 errno 设置为 PGTYPES_TS_BAD_TIMESTAMP。 关于该值的重要说明见 PGTYPESInvalidTimestamp。

总的来说,输入字符串可以包含一个允许的日期规定、 一个空白字符和一个允许的时间规定的任意组合。 注意,ECPG 不支持时区。它可以解析时区, 但不会像 PostgreSQL 服务器那样 做任何计算。时区说明符会被静默丢弃。

Table 34.5 包含一些输入字符串的示例。

Table 34.5. Valid Input Formats for PGTYPEStimestamp_from_asc

InputResult
1999-01-08 04:05:061999-01-08 04:05:06
January 8 04:05:06 1999 PST1999-01-08 04:05:06
1999-Jan-08 04:05:06.789-81999-01-08 04:05:06.789 (time zone specifier ignored)
J2451187 04:05-08:001999-01-08 04:05:00 (time zone specifier ignored)

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 #

使用格式掩码把一个 timestamp 变量转换为 C char* 字符串。

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

该函数的第一个参数(ts)是指向要转换的 timestamp 的指针,此外还接收指向输出缓冲区的指针 (output)、为输出缓冲区分配的最大长度 (str_len),以及用于转换的格式掩码 (fmtstr)。

成功时该函数返回 0,发生错误时返回一个负值。

你可以在格式掩码中使用以下格式说明符。这些格式说明符与 libc 中 strftime 函数所使用的相同。任何非格式说明符的字符都会被复制到输出缓冲区中。

  • %A - 星期几的全名(区域设置相关)。

  • %a - 星期几的缩写(区域设置相关)。

  • %B - 月份的全名(区域设置相关)。

  • %b - 月份名称的缩写(区域设置相关)。

  • %C - 以十进制数表示的世纪(年份除以 100,截断为整数)。

  • %c - 日期与时间的表示(区域设置相关)。

  • %D - is equivalent to %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 - is equivalent to %Y-%m-%d.

  • %G - 以带世纪的十进制数表示的年份。该年份是包含该周较大部分的那一年(以星期一作为一周的第一天)。

  • %g - 以十进制数表示的年份的后两位,与 %G 使用的年份一致。

  • %H - 以十进制数表示的小时(24 小时制)(00–23)。

  • %h - the same as %b.

  • %I - 以十进制数表示的小时(12 小时制)(01–12)。

  • %j - 以十进制数表示的一年中的日(001–366)。

  • %k - 以十进制数表示的小时(24 小时制)(0–23);单个数字前会加一个空格。

  • %l - 以十进制数表示的小时(12 小时制)(1–12);单个数字前会加一个空格。

  • %M - 以十进制数表示的分钟。

  • %m - 以十进制数表示的月份(01–12)。

  • %n - 一个换行符。

  • %O* - the same as %E*.

  • %p - 根据给定的时间值表示 AM 或 PM(区域设置相关)。

  • %R - is equivalent to %H:%M.

  • %r - is equivalent to %I:%M:%S %p.

  • %S - 以十进制数表示的秒。

  • %s - 自纪元(Epoch,UTC)以来的秒数。

  • %T - is equivalent to %H:%M:%S

  • %t - 一个制表符。

  • %U - 以十进制数表示的一年中的周数(以星期日作为一周的第一天)(00–53)。

  • %u - 以十进制数表示的星期几(星期一为一周的第一天)(1–7)。

  • %V - 以十进制数表示的当前年份的周数(星期一作为一周的第一天)(01–53)。

  • %v - is equivalent to %e-%b-%Y.

  • %W - 以十进制数表示的一年中的周数(以星期一作为一周的第一天)(00–53)。

  • %w - 以十进制数表示的星期几(0–6,星期日为 0)。

  • %X - 时间的表示(区域设置相关)。

  • %x - 日期的表示(区域设置相关)。

  • %Y - 以带世纪的十进制数表示的年份。

  • %y - 以十进制数表示的不带世纪的年份(00–99)。

  • %Z - 时区名称或缩写。

  • %z - 相对 UTC 的时区偏移;前导加号表示 UTC 以东,减号表示 UTC 以西, 后面的小时和分钟各占两位数字,中间没有分隔符 (RFC 3339 第 5.6 节中 Internet 日期/时间格式的一种常见形式)。

  • %+ - 被替换为日期与时间的国家表示。

  • %-* - 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)以及一个指向 timestamp 类型变量的指针(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);

该函数接收一个指向 timestamp 变量 tin 的指针、 一个指向 interval 变量 span 的指针, 以及一个指向 timestamp 类型变量 tout 的指针, 它将把 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 的数据。服务器中与之等价的类型见 Section 8.5。

以下函数可用于操作 interval 类型:

PGTYPESinterval_new #

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

PGTYPESinterval_free #

释放之前分配的 interval 变量的内存。

void PGTYPESinterval_free(interval *intvl);

PGTYPESinterval_from_asc #

从文本表示解析一个 interval。

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

该函数解析输入字符串 str 并返回一个指向 已分配的 interval 变量的指针。出错时会返回 NULL, 并把 errno 设置为 PGTYPES_INTVL_BAD_INTERVAL。

PGTYPESinterval_to_asc #

把一个 interval 类型的变量转换为它的文本表示。

char *PGTYPESinterval_to_asc(interval *span);

该函数把 span 所指向的 interval 变量 转换为 C char* 字符串,例如 @ 1 day 12 hours @。 结果必须用 PGTYPESchar_free() 释放。

PGTYPESinterval_copy #

复制一个 interval 类型的变量。

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

该函数把 intvlsrc 所指向的 interval 变量 复制到 intvldest 所指向的变量中。 如果出错则返回一个非零值。

34.6.6. decimal 类型 #

decimal 类型与 numeric 类型相似。但它被限制为 最多 30 位有效数字的精度。与只能在堆上创建的 numeric 类型不同, decimal 类型可以在栈上或堆上创建 (通过 PGTYPESdecimal_new 和 PGTYPESdecimal_free 函数)。

以下函数可用于操作 decimal 类型, 它们不仅包含在 libcompat 库中。

PGTYPESdecimal_new #

请求一个指向新分配的 decimal 变量的指针。

decimal *PGTYPESdecimal_new(void);

PGTYPESdecimal_free #

释放一个 decimal 类型,归还它的全部内存。

void PGTYPESdecimal_free(decimal *var);

34.6.7. pgtypeslib 的 errno 值 #

PGTYPES_NUM_BAD_NUMERIC #

一个参数应当包含一个 numeric 变量(或指向它的指针), 但它的数据类型是无效的。

PGTYPES_NUM_OVERFLOW #

发生了溢出。由于 numeric 类型可以处理几乎任意的精度, 把一个 numeric 变量转换为其他类型时可能会导致溢出。

PGTYPES_NUM_UNDERFLOW #

发生了下溢。由于 numeric 类型可以处理几乎任意的精度, 把一个 numeric 变量转换为其他类型时可能会导致下溢。

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 函数的 interval 字符串无效,或者传给 PGTYPESinterval_to_asc 函数的 interval 值无效。

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。