Я хотел бы иметь возможность загружать большие таблицы postgresql в ElasticSearch, не прибегая к подкачке страниц.
Я столкнулся с проблемой, когда размер выборки не может быть применен для соединений postgresql jdbc, так как для соединений по умолчанию установлено значениеautocommit, как сообщается здесь:
https://github.com/logstash-plugins/logstash-input-jdbc/issues/103
Глядя на документацию по плагину jdbc для входа logstash, я вижу, что под sequel_opts есть возможность указать вызываемый объект after_connect.
Я пытаюсь проверить, позволит ли реализация after_connect отключить автокоммит для размера выборки. Или, возможно, after_connect необходимо отключить автокоммит, а затем повторно применить значение размера выборки.
Похоже, это подход, который может работать, или кто-то уже пошел по этому пути и увидел, что он потерпел неудачу?
Я пытаюсь реализовать это в моем файле конфигурации logstash. Мне не удалось придумать синтаксис Ruby для правильного вызова сценария.
Я пробовал несколько вариантов - см. Ниже мою последнюю попытку. Буду признателен за любые рекомендации о том, как правильно представлять этот код.
jdbc {
# Postgres jdbc connection string to our database
jdbc_connection_string => "${JDBC_URL}"
# validate connection before use
jdbc_validate_connection => true
# The user we wish to execute our statement as
jdbc_user => "${JDBC_USER}"
# The password for jdbc_user
jdbc_password => "${JDBC_PWRD}"
# The path to our downloaded jdbc driver
jdbc_driver_library => "${JDBC_JAR}"
# The name of the driver class for Postgresql
jdbc_driver_class => "${JDBC_DRIVER}"
sql_log_level => "debug"
jdbc_fetch_size => 10000
sequel_opts => {
after_connect =>
"proc { |c| c.autocommit = false } end"
}
# our query
statement => "some valid select statement"
}
Спасибо.
Дэвид