我即将结束mySQL数据库迁移到新的postgreSQL数据库。在这种情况下,我不得不翻译"我的例程从mySQL到postgreSQL。
我注意到,在除以零的情况下,两种语言的行为是不同的。如果执行以下查询:
SELECT a/b as result FROM t ;
在mySQL中,列b
等于0的行将只返回NULL。相反,在postgreSQL中,您将收到以下错误:
ERROR: division by zero
SQL state: 22012
为了防止这种情况,您显然可以执行以下操作:
SELECT
a / NULLIF(b,0)
as result
FROM t;
你会得到与mySQL相同的行为(我更喜欢这种行为,因为我觉得它更健壮)。
我天真地尝试执行以下查询以获取我必须编辑的所有例程的名称:
SELECT routine_name FROM information_schema.routines
WHERE routine_definition LIKE '%/%'
AND routine_schema = 'myschema' ;
问题是此查询还将返回包含至少一个由字符/* */
分隔的注释的所有例程的名称。而且我不想得到这些(因为那几乎是我的所有惯例)。
因此,我希望获得routine_definition
匹配/
但不 */
/*
的例程。我觉得regular expression matching可以帮助我做到这一点,但我几乎从未使用过这些,即使在阅读了我刚刚链接的文档后,我也感到有些失落。