C 如何在星号中将PostgreSQL DB时间戳更新为空?

C 如何在星号中将PostgreSQL DB时间戳更新为空?,c,postgresql,asterisk,C,Postgresql,Asterisk,我使用ast_update_realtime()更新到PostgreSQL数据库 res = ast_update_realtime("confinfo", "id", "01", "start_time", "NULL", SENTINEL); res = ast_update_realtime("confinfo", "id", "01", "start_time", NULL, SENTINEL); 但我犯了这样一个错误: [Oct 20 15:44:50] ERROR[30428][

我使用ast_update_realtime()更新到PostgreSQL数据库

res = ast_update_realtime("confinfo", "id", "01", "start_time", "NULL", SENTINEL);
res = ast_update_realtime("confinfo", "id", "01", "start_time", NULL, SENTINEL);
但我犯了这样一个错误:

[Oct 20 15:44:50] ERROR[30428][C-00000000]: res_config_pgsql.c:169 _pgsql_exec: PostgreSQL RealTime: Query Failed because: ERROR:  invalid input syntax for type timestamp with time zone: "NULL"
LINE 1: UPDATE confinfo SET start_time = 'NULL' WHERE id = '01'
                                        ^
 (PGRES_FATAL_ERROR)
我发现原因是“NULL”,而不是SQL字符串中的NULL。
如何更正它?

您可以尝试输入空字符串,例如
'
,或者简单地

而不是

updateconfinfo SET start\u time='NULL',其中id='01'


因此,您应该在不使用
”的情况下传递NULL

我知道这一点,但我不使用直接通过PostgreSQL,而是使用值为“NULL”字符串的ast\u update\u realtime()。当星号将其转换为SQL字符串时,“NULL”字符串为“NULL”(单引号)。如何删除此报价?@GSP是否可以通过
NULL
而不通过
像这样
res=ast\u update\u realtime(“confinfo”、“id”、“01”、“start\u time”、NULL、SENTINEL”)ast_update_realtime()函数将以NULL结尾(SENTIEL为NULL)。如果我在没有引号的情况下通过NULL,我得到了分段错误(核心转储)@GSP尝试这个
res=ast\u update\u realtime(“confinfo”,“id”,“01”,“start\u time”,“select NULL::date”,SENTINEL)我用这种方式检查,但它与上面的问题相同。当它添加到“(select null::date)”时,SQL不起作用。@GSP:-尝试以下操作:
res=ast\u update\u realtime(“confinfo”、“id”、“01”、“start\u time”、“SENTINEL”)我收到了相同的错误(它刚刚将SQL字符串中的“NULL”更改为“”)@GSP:-我不确定,但我可以想出一种解决方法,您可以将表中列的默认值设置为NULL,如下所示:
ALTER table MyTable ALTER column name DATETIME default NULL
,然后您可以像这样简单地使用查询
res=ast\u update\u realtime(“confinfo”,“id”,“01”,“start\u time”,SENTINEL);我尝试了你的方法,但我得到了分段错误(核心转储)。P/S:我尝试将“NULL”更改为“now()”,它可以将当前时间更新到此字段。@GSP:-Yes now()将在您的列中插入当前日期时间。
 UPDATE confinfo SET start_time = NULL WHERE id = '01'