我可以看到电流search_path
:
show search_path ;
Run Code Online (Sandbox Code Playgroud)
我可以search_path
为当前会话设置:
set search_path = "$user", public, postgis;
Run Code Online (Sandbox Code Playgroud)
同样,我可以search_path
为给定的数据库永久设置:
alter database mydb set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令永久设置search_path
给定角色(用户):
alter role johnny set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在更改数据库和角色设置search_path
之前确定它们是什么(相对于)?
我非常喜欢bash
的反向搜索历史(Cr)(命令行功能):
从当前行开始向后搜索,并根据需要在历史记录中“向上”移动。这是一个增量搜索。
当我进入control-r
时bash
,我得到以下信息:
(reverse-i-search)`':
Run Code Online (Sandbox Code Playgroud)
而且我能够输入以前执行过的命令的字符,并仔细研究我正在寻找的内容。如果我出错了,我可以输入control-h
擦除一个字符(相当于backspace
)。
这个命令行功能使得引用以前执行的命令变得非常容易。我想知道psql
. 我发现仅依赖control-p
and是非常低效的control-n
。
对于它的价值,我正在使用PostgreSQL 9.3.1 on x86_64-apple-darwin13.0.0, compiled by Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn), 64-bit
- 通过Postgres.app获得。
查看下面的示例,从第一行 ( id=9
)开始,然后向下工作,选择我们尚未看到的具有's的行数限制。我们“选择”是因为我们还没有. 我们继续像这样往下工作,但是当我们到达时我们跳过它,因为我们已经有了(从行开始)。我们以同样的方式继续,我们最终停下来,因为我们已经积累了行(我们想要的限制)。4
sec
id=9
sec=1
id=7
sec=5
id=8
id=3
4
id | sec
----+-----
9 | 1 <- 1
8 | 5 <- 2
7 | 5 # skip, already have sec=5
6 | 4 <- 3
5 | 1 # skip, already have sec=1
4 | 1 # skip, already have sec=1
3 | 3 <- 4
2 | 2
1 | 1
Run Code Online (Sandbox Code Playgroud)
当然,SQL
算法可以(将!)与我描述的不同。
想要的结果:
id
----
9
8
6
3 …
Run Code Online (Sandbox Code Playgroud) 假设我正在搜索三个文本列。我不仅想要与给定单词或短语匹配的结果,而且还想对它们进行加权 ( column A > column B > column C
) - 从而对结果进行排序,使得与列中的单词匹配的行A
将比列中匹配的行高B
,而那些column 中的匹配B
将高于 column 中的匹配C
。
这可能吗?你能为我提供一些术语或进一步阅读的建议吗?
在搜索 能力和性能方面,将标签作为或或全文字段实现的优缺点是什么?array
text
我发现选择使用数组实现标签的能力有局限性,因为在我看来,如果数组包含,['juicy fruit']
那么搜索的人'fruit'
将找不到该记录(例如,tags && ARRAY['fruit']
找不到它)。创建该记录的人将不得不输入更像是['juicy fruit', 'juicy', 'fruit']
只需搜索'fruit'
或 即可找到他们的记录的内容'juicy'
。而如果我将标签实现为text
,那么搜索'fruit'
将找到'juicy fruit'
,更进一步,如果我将标签实现为全文,那么我将'juicy fruit'
在使用字符串'fruits'
(复数)进行搜索时找到。此外,我认为进行全文搜索不会有性能损失。想法?
但也许标签的全部意义是 完全匹配。