[编辑]这个问题的原始标题是"以声明的方式获取Postgres数组的最后一个元素"
如何在Postgres中获取数组的最后一个元素?
我需要以声明方式进行,因为我想将它用作ORDER BY标准.我不想为它创建一个特殊的PGSQL函数,在这种情况下对数据库的更改越少越好.
实际上,我想要做的是按包含多个单词的特定列的最后一个单词进行排序.此处不能更改模型.
换句话说,我想将Ruby推sort_by {|x| x.split[-1]}入数据库级别.我可以使用Postgres string_to_array或regexp_split_to_array函数将值拆分为单词数组,然后如何获取其最后一个元素?
我想有选择地删除AMQP队列中的消息,甚至不读取它们.
方案如下:
发送方希望根据X类型的新信息到达的事实使类型X的消息到期.因为订阅者很可能还没有使用类型X的最新消息,所以发布者应该只删除以前的X类型消息并将最新的消息放入队列中.整个操作应该对订户透明 - 实际上他应该使用像STOMP这样简单的东西来获取消息.
如何使用AMQP做到这一点?或者它可能在另一个消息传递协议中更方便?
我想避免复杂的基础设施.所需的整个消息传递如上所述:一个队列,一个订阅者,一个发布者,但发布者必须能够临时删除给定条件的消息.
发布者客户端将使用Ruby,但实际上,一旦我发现如何在协议中执行它,我就会处理任何语言.
我有很多情况,我希望在使用Rails时有一个非自动增量主键.
示例:我在A和B之间有一对一的关系.B描述了添加到A的一些特定功能,因此在没有A的情况下不能存在.所以我们有:
A有一个B
B属于A.
自然的想法是将B.A_id作为主键.所以我尝试create_table b, :id=>false了迁移和set_primary_key :a_idB的模型,但它没有在数据库中创建实际的主键.我想要它们(以及外键),因为数据库不仅会被这个Rails应用程序使用.
如果我用执行创建主键,它们不会落在schema.rb中,这会受到伤害.现在我正在考虑一个解决方法:只要对该列有唯一约束,我就可以没有PK约束,所以我可以在迁移中使用Rails的add_index,这似乎更优雅.
有什么建议?
我有一个Postgres后端的Rails应用程序.
我需要添加全文搜索,这将允许基于Levenshtein距离或其他类似指标的模糊搜索.添加词法分析器/词干分析器必须使用非英语单词这一事实(可以在lexing时关闭与语言相关的功能,而不是弄乱目标语言,这可能会使英语引擎认为有意义的单词无关紧要).
我想Postgres的研究不会在这里适用,因为它没有模糊搜索 - 如果我错了,请纠正我.
后端和插件的可能组合有哪些?它更喜欢在基础设施上添加较少的解决方案(例如,如果Postgres可以有模糊fts,为什么要使用外部Lucene); OTOH,Rails插件的质量也很重要.
你会推荐什么?
更新:似乎我需要比Levenshtein更基于n-gram的指标.
postgresql full-text-search ruby-on-rails n-gram levenshtein-distance
在编写利用网络的程序时,您会发现使用的编译速度明显下降CGO_ENABLED=0。
例如,最简单的HTTP服务器:
package main
import (
"flag"
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi! glad you requested %s.\n", r.URL.Path[1:])
}
func main() {
port := flag.Int("port", 9000, "")
flag.Parse()
http.HandleFunc("/", handler)
err := http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)
if err != nil {
log.Fatal(err)
}
}
Run Code Online (Sandbox Code Playgroud)
时间是:
% time go build
go build 0.46s user 0.06s system 131% cpu 0.396 total
% time CGO_ENABLED=0 go build
CGO_ENABLED=0 go build 3.93s user 0.15s system 143% cpu …Run Code Online (Sandbox Code Playgroud) 请注意我来自Ruby&Node.js世界,并希望使用简洁而不必复杂的东西.
使用haml会很棒,但不是必需的.
我正在看Jinja2,但它似乎是一个更好的实现与标准模板大致相同的想法似乎恕我直言过度工程.如果您认为情况并非如此,我也希望听到这样的意见.
TIA
postgresql ×2
activerecord ×1
amqp ×1
arrays ×1
cgo ×1
compilation ×1
go ×1
html ×1
messaging ×1
n-gram ×1
primary-key ×1
python ×1
rabbitmq ×1
templates ×1