Postgres检查列名是否有效

时间:2017-12-13 15:21:43

标签: sql postgresql

在Oracle中我们有

select dbms_assert.simple_sql_name(TEST) from dual

postgresql中的等价物是什么?我似乎找不到任何答案。

如果Oracle中的列错误,我们得到:

 ORA-44003: invalid SQL name ORA-06512: at "SYS.DBMS_ASSERT", line 160
 44003. 0000 -  "invalid SQL name"
 *Document: Yes
 *Cause:    The input parameter string was not a valid simple SQL name.
 *Action:   Check with the DBMS_ASSERT spec to verify that the parameter
            string is a valid simple SQL name.

1 个答案:

答案 0 :(得分:2)

不完全相同的事情,但是"非法"必须在Postgres(和SQL)中引用标识符。函数format()有一个特殊的标识符占位符,如果有任何非标准的内容,它将返回一个带引号的标识符:

因此select format('%I', 'foo')会返回foo

select format('%I', 'foo bar')会返回"foo bar"

因此,如果您检查引用了返回值(以"开头),那么它不是有效的标识符。

这也会检查保留的关键字,因此select format('%I', 'order')会返回"order"