服务器 频道

PostgresQL空字符串''插入数字列

  【IT168 服务器学院】PostgresQL7.3版之后,不再允许空字符串''''作为空值null直接插入数字类型的列中,所以插入数据时经常会出现

  ERROR: invalid input syntax for integer: ""

  之类的错误,而PostgresQL本身并未提供直接将空字符串自动转换为0或null的函数,这使得写应用程序时非常棘手。

  比较标准的解决方法是:

  1、在应用程序中控制(废话)

  2、在要插入的表上做触发器,自动将''''转换为0或null

  3、自定义数据类型,在输入输出函数中自动将''''转换为0或null

  4、自定义函数,在应用程序中套在可能会产生''''的字段外面

  函数举例:

  esin(enpty string is null)

  CREATE OR REPLACE FUNCTION esin(text)

  RETURNS int4 AS

  $BODY$

  SELECT CASE

  WHEN $1='''' THEN null

  ELSE $1::integer

  END;

  $BODY$

  LANGUAGE ''sql'' VOLATILE;

  ALTER FUNCTION esin(text) OWNER TO postgres;

  5、最后一种方法是hack源码,重新编译PgSQL(代码可参见7.2版)
0
相关文章