Postgresql
LIKE 搜尋 bytea 數據類型 (PostgreSQL)
桌子:
\d blob Column | Type | Collation | Default ---------+--------------+-----------+------------------------------------------ id | integer | | nextval('modlink_blob_id_seq'::regclass) content | bytea | |
這個說法:
SELECT COUNT(*) "job" INNER JOIN "blob" ON ("job"."input_id" = "blob"."id") WHERE UPPER("blob"."content"::text) LIKE UPPER('%csv%');
錯誤資訊:
ERROR: invalid memory alloc request size 1989028364
我該怎麼做才能使這個聲明不失敗?
也許你可以使用位置函式https://www.postgresql.org/docs/13/functions-binarystring.html
WHERE position('csv'::bytea in "blob"."content") > 0
我發現在具有大量內容的列中在 PostgreSQL 中進行“LIKE”搜尋的最佳方法是使用 tsvector 列。
一個優點是比進行“喜歡”搜尋更快並允許創建索引。
無聊的部分是創建一個觸發器來複製新列中的內容。
下面的文章展示瞭如何使用 tsvector。
http://rachbelaid.com/postgres-full-text-search-is-good-enough/
Column | Type | Collation | Default ---------+--------------+-----------+------------------------------------------ id | integer | | nextval('modlink_blob_id_seq'::regclass) content | bytea | | search | tsvector | |
這是 SQL
SELECT COUNT(*) FROM "job" INNER JOIN "blob" ON ("job"."input_id" = "blob"."id") WHERE blob.search @@ plainto_tsquery('csv');
觀察:我使用
text
列代替bytea
。