如何在postgresql中只允许字母数字字段值

时间:2015-09-17 16:25:02

标签: postgresql

在SQL Server(T-SQL)中,我们可以像在此处发布一样:

http://www.sqlrelease.com/allow-only-alphanumeric-characters-in-a-column

如何在PostgreSQL中做同样的事情?

以下没有成功 -

CREATE OR REPLACE FUNCTION dummy.checkalphanumeric(username character varying(32))
  RETURNS integer AS
$BODY$
BEGIN
RETURN (SELECT CASE WHEN regexp_matches(username, '%[^a-zA-Z0-9]%') > 
false THEN false ELSE true END);
END; $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION dummy.checkalphanumeric(username character varying(32))
  OWNER TO postgres;

和ALTER查询 -

ALTER TABLE dummy.provisioning_user ADD CONSTRAINT 
CK_provisioning_user CHECK (dummycheckalphanumeric(username) = 1)

1 个答案:

答案 0 :(得分:5)

不需要你自己的功能。

另外:%不是正则表达式的通配符。在该示例中使用它的原因是该示例适用于不支持正则表达式的SQL Server(但我不明白为什么在SQL Server中需要单独的函数)

ALTER TABLE dummy.provisioning_user 
   ADD CONSTRAINT CK_provisioning_user 
   CHECK (regexp_matches(username, '[a-zA-Z0-9]*'));

约束将检查仅包含字符(来自a-z)和0-9位数的值。它将允许"什么都没有"虽然。如果您不想要,则需要使用'[a-zA-Z0-9]+'作为正则表达式