在utf8_general_ci和之间utf8_unicode_ci,性能方面有什么不同吗?
我正在实现一个具有数据类型为的列的表,tsvector我试图了解哪个索引更适合使用?
GIN还是GiST?
通过这里查看postgres文档,我似乎得到了:
GiST更新和构建索引的速度更快,而且比杜松子酒更准确.
GIN更新和构建索引的速度较慢,但更准确.
好的,那么为什么有人想要杜松子酒的gist索引字段呢?如果要点可能会给你错误的结果?必须有一些优势(外部表现).
当我想要使用GIN和GiST时,有人可以用外行的方式解释吗?
我正在尝试将PostgreSQL配置为在我的rails应用程序中使用全文搜索,如此Railscast中所述.
我正在使用与with一起Ubuntu 12.04运行PostgreSQL 9.1.5安装的新服务器.apt-getppa:pitti/postgresqlprecise
尝试运行迁移时,当我在psql控制台中使用peer postgres用户尝试相同的命令时,我收到以下错误:
postgres=# CREATE EXTENSION unaccent;
Run Code Online (Sandbox Code Playgroud)
错误:无法打开扩展控制文件"/usr/share/postgresql/9.1/extension/unaccent.control":
没有这样的文件或目录
在我的本地框运行中,Ubuntu 10.04 desktop我使用相同的存储库(natty),它运行良好.
任何见解将不胜感激.
postgresql full-text-search unaccent rails-postgresql postgresql-9.1
在PostgreSQL中,我想使用SQL语句组合两列并从中创建一个新列.
我正在考虑使用concat(...),但有更好的方法吗?
最好的方法是什么?
我正在尝试删除重音,所以当我进行SELECT时它会忽略它们.
例:
SELECT * FROM table WHERE
table.id ILIKE 'Jose';
Run Code Online (Sandbox Code Playgroud)
它返回:
José
Jose
Jósé
Jóse
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
我发现这些功能并且它们不起作用,我想可能是因为我使用的是Struts 1.X,请检查它们并告诉我哪里错了或我应该使用哪些其他功能.
第一功能
CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text AS $$
DECLARE
input_string text := $1;
BEGIN
input_string := translate(input_string, 'âãäå???ÁÂÃÄÅ???', 'aaaaaaaaaaaaaaa');
input_string := translate(input_string, 'èééêë??????????', 'eeeeeeeeeeeeeee');
input_string := translate(input_string, 'ìíîïì???ÌÍÎÏÌ???', 'iiiiiiiiiiiiiiii');
input_string := translate(input_string, 'óôõö???ÒÓÔÕÖ???', 'ooooooooooooooo');
input_string := translate(input_string, 'ùúûü????ÙÚÛÜ????', 'uuuuuuuuuuuuuuuu');
return input_string;
END;
$$ LANGUAGE plpgql;
Run Code Online (Sandbox Code Playgroud)
第二功能
CREATE OR REPLACE FUNCTION norm_text_latin(character varying)
RETURNS character varying AS …Run Code Online (Sandbox Code Playgroud) 如何在Rails中修改搜索查询的where/like条件:
find(:all, :conditions => ["lower(name) LIKE ?", "%#{search.downcase}%"])
无论重音如何,结果都是匹配的?(例如métro= metro).因为我使用的是utf8,所以我不能使用"to_ascii".生产正在Heroku上运行.
与此问题类似,如何查找数组中是否存在NULL值?
这是一些尝试.
SELECT num, ar, expected,
ar @> ARRAY[NULL]::int[] AS test1,
NULL = ANY (ar) AS test2,
array_to_string(ar, ', ') <> array_to_string(ar, ', ', '(null)') AS test3
FROM (
SELECT 1 AS num, '{1,2,NULL}'::int[] AS ar, true AS expected
UNION SELECT 2, '{1,2,3}'::int[], false
) td ORDER BY num;
num | ar | expected | test1 | test2 | test3
-----+------------+----------+-------+-------+-------
1 | {1,2,NULL} | t | f | | t
2 | {1,2,3} | f | f …Run Code Online (Sandbox Code Playgroud) 假设我有一个表,我想使用serial主键来请求客户端的更改.客户将询问"在密钥X后给我更改".不使用SERIALIZABLE隔离级别或锁定,这很容易出现竞争条件.
事务A可以先启动,然后执行写操作,然后花费很长时间来提交.同时事务B将在A提交之前启动并提交.来自B的写入将获得比来自A的写入更高的主键.如果客户端现在要求更改,则它将错过来自A的仍然未提交的写入,并记下最新的最高主键.因此,即使在A提交之后,客户端也永远不会看到该更改,因为它的密钥低于客户端已经获得的更改.
是否有可能serial在提交时以原子方式确定a (或来自计数器的类似值),以便保证在提交时它将高于所有其他值,并且低于在其之后提交的所有值?如果不是解决这个问题的最佳方法是什么?
我正在运行一个在添加记录时逐渐变慢的查询.通过自动过程(bash调用psql)连续添加记录.我想纠正这个瓶颈; 但是,我不知道我最好的选择是什么.
Hour Count Duration Avg duration
00 9,990 10m3s 60ms <---ignore this hour
02 1 60ms 60ms <---ignore this hour
03 4,638 1m54s 24ms <---queries begin with table empty
04 30,991 55m49s 108ms <---first full hour of queries running
05 13,497 58m3s 258ms
06 9,904 58m32s 354ms
07 10,542 58m25s 332ms
08 8,599 58m42s 409ms
09 7,360 58m52s 479ms
10 6,661 58m57s 531ms
11 6,133 59m2s 577ms
12 5,601 59m6s 633ms
13 5,327 59m9s 666ms
14 …Run Code Online (Sandbox Code Playgroud) sql postgresql database-design postgresql-performance postgresql-9.4
我安装了Postgres扩展(unaccent)
sudo su posgres
psql create extension unaccent
Run Code Online (Sandbox Code Playgroud)
现在我可以在sql中使用unacccent,但前提是我是Postgres用户.
如何向所有/另一个用户提供Postgres扩展
(我在Ubuntu上使用apt-install安装Postgres 9.3.5)
jthinksearch=# \dx;
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+---------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
unaccent | 1.0 | public | text search dictionary that removes accents
(2 rows)
jthinksearch=#
jthinksearch=> \du;
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication | {}
ubuntu | | …Run Code Online (Sandbox Code Playgroud)