我有一个规范化的数据库,该数据库在AWS RDS Postgres数据库中有几个表,大约有一百万条记录。
我想编写一个实现视图,该视图将这些表中的几个表连接起来,以生成ElasticSearch文档的记录结构。
刷新物化视图时(我将使用并发选项),我希望将该活动作为插入或更新或删除操作推送到AWS ElasticSearch。
我只会修改基础表并每周刷新一次物化视图。
这项工作是否可以-具体化的物化视图刷新是否会在WAL中作为插入/更新/删除记录下来?
答案 0 :(得分:0)
我正在我正在从事的项目中进行此操作,到目前为止一切正常,我将logstash用作独立应用程序,每次我想要更新数据时,我都会刷新物化视图并使用postgres驱动程序运行logstash (就我而言,我在服务器上有一份工作,每2个小时执行一次)。
为此,您需要运行命令行:
path/to/logstash/bin/logstash -f path/to/postgres2elasticsearch.conf
在文件“ postgres2elasticsearch.conf”中,您应该输入:
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}"
jdbc_user => "${RDS_USERNAME}"
jdbc_password => "${RDS_PASSWORD}"
jdbc_driver_library => "${DRIVE_PATH}"
jdbc_driver_class => "org.postgresql.Driver"
statement => "SELECT * from ${MY_MATERIALIZED_VIEW} order by ${ID_FIELD}"
jdbc_paging_enabled => true
}
}
output {
elasticsearch {
index => "${ES_INDEX}"
hosts => ["${ES_DATA_HOST}:443"]
}
}
查询中的order by
子句很重要,因为Logstash将分批插入数据,如果您不订购数据,则可能一部分数据重复而另一部分不重复完全不适合Elasticsearch,因此我建议您为此事在物化视图上有一个索引唯一字段。然后,您需要下载postgres jdbc driver并将其放在$ {DRIVE_PATH}