错误:PostgreSQL 中不存在列

Posted

技术标签:

【中文标题】错误:PostgreSQL 中不存在列【英文标题】:Error: column does not exist in PostgreSQL 【发布时间】:2016-06-29 14:13:03 【问题描述】:

如果searchTerm 存在于其中一列中的任何位置,则尝试创建一个将从表中返回多行的函数。 (我是 Postgres 的新手。)

 CREATE OR REPLACE FUNCTION dts_getProjects(searchTerm TEXT) RETURNS SETOF project
 AS $$
 SELECT credit_br AS Branch, status FROM job_project
 WHERE credit_br LIKE '%'||searchTerm||'%'
 $$
 language 'sql';

我收到此错误:

 ERROR:  column "searchTerm" does not exist
 LINE 3: ...status FROM job_project WHERE credit_br LIKE '%'||searchTerm||'...

【问题讨论】:

请记住始终提供您的 Postgres 版本以及相关表的确切表定义。提示:SELECT version(); 【参考方案1】:

它应该像这样工作:

CREATE OR REPLACE FUNCTION dts_get_projects(_search_term text)
  RETURNS SETOF job_project AS
$func$
SELECT j.*
FROM   job_project j
WHERE  j.credit_br ILIKE '%' || _search_term || '%'
$func$  LANGUAGE sql;

我正在使用表格类型来返回整行。这是安全的后备方案,因为您没有披露任何数据类型或表定义。

我还使用ILIKE 使搜索不区分大小写(只是猜测,由您决定)。

这只会搜索 onecredit_br。您的描述听起来像是您想要搜索所有列 (anywhere inside one of the columns)。同样,大多数基本信息都丢失了。一种非常快速且略显肮脏的方法是搜索转换为 text 的整行表达式:

...
WHERE  j::text ILIKE '%' || _search_term || '%';
...

相关:

Check a whole table for a single value

旁白: 如果可以避免的话,不要在 Postgres 中使用大小写混合的标识符。

Are PostgreSQL column names case-sensitive?

不要引用函数的语言名称。这是一个标识符。

【讨论】:

嗨欧文,不是需要开始结束吗?由于我收到此错误pasteboard.co/22ZD5izR.jpg @bluepiranha:LANGUAGE plpgsql 需要BEGINEND,但LANGUAGE sql 不需要。您收到的错误表明您使用的是非常旧的 Postgres 版本,其中 SQL 函数不接受参数名称。你可以在函数体中使用$1

以上是关于错误:PostgreSQL 中不存在列的主要内容,如果未能解决你的问题,请参考以下文章

postgresql 中不存在函数 min(uuid)

postgres 错误:Postgresql 11.6 中的列不存在错误

将 oracle 转换为 PostgreSQL 时出现数字溢出

如何仅从 PostgreSQL 的内部联接中不存在 id 的表中选择行?

命令中的 Postgres 语法错误与文档一致

检查 json 类型列 PostgreSQL 中是不是存在字段