gpt4 book ai didi

postgresql - PGError : ERROR: operator does not exist: boolean ~~* unknown

转载 作者:行者123 更新时间:2023-11-29 11:33:56 25 4
gpt4 key购买 nike

我在本地使用 SQLite 进行开发,但在我的生产主机上运行 PostgreSQL。在本地一切正常,但在生产主机上却不是这样。

我已经构建了一种搜索表单,通过它我可以使用我喜欢的任何组合来评估我数据库中的所有数据。只要我不使用 bool 值和/或日期字段,这似乎就可以正常工作。 PostgreSQL 似乎不太喜欢我的代码……

所以,这里有一些示例代码:

unless params[:analysis][:sporty].blank?
tmp_conditions_customer << ["(sporty ILIKE ?)", "%#{params[:analysis][:sporty]}%"]
end

计算结果为

SELECT COUNT(*) FROM "customers" WHERE ((sporty ILIKE '%%') 

为什么会这样?为什么是“%%”?

为了测试部署,我使用了带有 Exceptional 插件的 Heroku。这个插件给了我以下提示:

提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

谢谢 Exceptional,但这到底是什么意思? :-D SQL 查询的类型转换?效果如何?

在我的迁移中,数据库字段如下所示:

t.boolean :sporty

在我创建此数据的表单中,我使用此代码

<%= f.label :sporty %><br />
<%= f.select :sporty, options_for_select({ "Ja" => true, "Nein" => false }), { :include_blank => '-----'} %>

正如我已经提到的,SQLite 是我的 friend ,似乎是对 PostgreSQL 的更严格的评估导致了麻烦。

提前感谢您的帮助。

最佳答案

直接答案在底部附近。 . .

This evaluates to

SELECT COUNT(*) FROM "customers" WHERE ((sporty ILIKE '%%') 

Why’s that anyway? Why the '%%'?

在 SQL 中,'%' 是一个通配符。但是你的问题似乎是你正在构建一个 WHERE 子句,它有两个左括号,但只有一个右括号。

像这样的 WHERE 子句可能会返回(或计算)所有行:

WHERE (sport ILIKE '%%')

Type casts for SQL queries? How’s that gonna work?

标准 SQL 有一个 CAST() 函数。骨架语法是

CAST (expression AS type)

所以,例如,你可以写

CAST (<any timestamp> AS DATE) 

将时间戳更改为日期数据类型,或者

CAST ('32' AS INTEGER)

将字符串 '32' 更改为整数 32。

In my migration the database field looks like this:

t.boolean :sporty

如果“运动型”列是 bool 值,这就是您的真正问题。如果您尝试对 bool 值使用字符串比较(您所做的:WHERE ((sporty ILIKE '%%') ),您将收到您看到的错误消息。您希望语句更像这样:

SELECT COUNT(*) FROM "customers" WHERE sporty;
SELECT COUNT(*) FROM "customers" WHERE sporty = true;

SELECT COUNT(*) FROM "customers" WHERE NOT sporty;
SELECT COUNT(*) FROM "customers" WHERE sporty = false;

关于postgresql - PGError : ERROR: operator does not exist: boolean ~~* unknown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com