gpt4 book ai didi

sql - pgAdmin III 错误行为?

转载 作者:行者123 更新时间:2023-11-29 12:00:11 24 4
gpt4 key购买 nike

我在 pgAdmin 上查询时偶然发现了这种奇怪的行为。
我已连接到运行 PostgreSQL 9.1.9 的服务器。
我有一个名为 messages 的表,其定义如下:

ghareh@godot:~$ psql
psql (9.1.9)
Type "help" for help.

ghareh=# \d messages
Table "public.messages"
Column | Type | Modifiers
---------------+-----------------------------+---------------------------------
messageid | character varying(200) | not null
senderaliasid | integer | not null
referenceid | character varying(200) | default NULL::character varying
recipaliasid | integer |
datetime | timestamp(2) with time zone | not null
subject | character varying(512) | not null
body | text | not null
listid | integer |
Indexes:
"messages_pkey" PRIMARY KEY, btree (messageid)
"messages_datetime_idx" btree (datetime)
"recipaliasid_idx" btree (recipaliasid)
"referenceid_idx" btree (referenceid)
"senderaliasid_idx" btree (senderaliasid)
Foreign-key constraints:
"messages_listid_fkey" FOREIGN KEY (listid) REFERENCES lists(listid)
"messages_recip_fkey" FOREIGN KEY (recipaliasid, listid) REFERENCES aliases(aliasid, listid)
"messages_sender_fkey" FOREIGN KEY (senderaliasid, listid) REFERENCES aliases(aliasid, listid)
Referenced by:
TABLE "messages_attachments" CONSTRAINT "pkfkmid" FOREIGN KEY (messageid) REFERENCES messages(messageid)

我的问题涉及列、bodysubject

我有一个生成一组结果的查询。然后,为了优化我的查询,我添加了术语:where body like '%JSON%' 即 body 包含字符串 'JSON' 的结果子集。
我得到了一些包含这个词的结果,还有一些没有!但是,如果我搜索任意字符串,结果就可以了。我检查了一下,发现查询不仅搜索正文列,还搜索主题列,这太疯狂了。

这是我的初始查询:

select * from messages where messageid = '44BC310F.1090305@torrez.us'

返回 1 行:

messageid: "44BC310F.1090305@torrez.us";
senderaliasid: 13777;
referenceid: "7edfeeef0607171746r7d708067g15c77c3aa0ef9158@mail.gmail.com";
recipaliasid: ;
datetime: "2006-07-17 20:53:35-07";
listid: 251;
subject: "Re: svn commit: r422930 - /incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java";
body: "busted! thanks for the thorough review.


-Elias

Garrett Rooney wrote:
> On 7/17/06, eliast@apache.org <eliast@apache.org> wrote:
>> Author: eliast
>> Date: Mon Jul 17 17:44:10 2006
>> New Revision: 422930
>>
>> URL: http://svn.apache.org/viewvc?rev=422930 (...)"

如果我搜索:

select * from messages
where messageid = '44BC310F.1090305@torrez.us'
and body like '%JSON%'

我应该得不到任何结果,因为体内没有。但我仍然返回同一行 - 这似乎是因为“JSON”在 subject?

我什至试过这个:

select * from messages
where messageid = '44BC310F.1090305@torrez.us'
and body like '%incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java%'

我仍然回到了同一行。我很困惑。

我试图在 sqlfiddle.com 上重现结果,但没有成功。在那里,我得到了 sql 选择查询的预期内容:
http://sqlfiddle.com/#!1/ec74c/4

最佳答案

您无法在 SQL Fiddle 上重现相同的效果。

我在 Postgres 9.1.13 (always upgrade to the latest point release!) 中重新创建了您的表,并在 pgAdmin(当前版本 1.18.1)中运行了查询。 我无法重现该问题。

pgAdmin?

我不明白 pgAdmin 如何在这方面发挥作用 - 除非您只选择了查询的一部分,而没有意识到这种影响:
pgAdmin shortcuts to execute scripts

或者您可能会被“每列的最大字符数”设置所愚弄,该设置会截断显示中的长值,将匹配项隐藏在截断的部分中,例如 @IMSoP suggested in his comment .检查 File -> Options ...

pgAdmin option

如果不是这样,除非我们正在处理错别字或不在您的问题中的情况,否则这将表明您的数据库中出现了某些问题。

腐败?

在索引损坏的简单情况下,REINDEX TABLE可能会成功:

REINDEX TABLE messages;

但是,仔细观察,我没有看到可能是这里的罪魁祸首的索引。

损坏的系统目录? 先读这个:
http://wiki.postgresql.org/wiki/Corruption

然后阅读Notes section for REINDEX并从 shell 运行:

$ export PGOPTIONS="-P"
$ psql broken_db
...
broken_db=> REINDEX DATABASE broken_db;
broken_db=> \q

损坏通常表示您的硬件存在问题。磁盘故障或其他问题。跟进......

相关问题:
Repair Corrupt database postgresql

关于sql - pgAdmin III 错误行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553887/

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