citusdb ОШИБКА: ОШИБКА: невозможно выполнить PREPARE для плана распределенного запроса
Я только что сделал урок citusdb. И локальное использование "psql" работает нормально. Но когда я пытаюсь сделать тот же запрос, используя родной Postgres JDBC, я получаю ошибку:
ERROR: ERROR: cannot execute PREPARE for a distributed query plan
Query = SELECT count(*) FROM customer_reviews
Локально работает отлично,
postgres=# SELECT count(*) FROM customer_reviews;
подсчитывать
589859 (1 ряд)
4 ответа
Ну, я использовал инструмент запросов RazorSQL, используя JDBC. Но я перехожу на ODBC и сейчас работает.
Ссылаясь на страницу распространенных ошибок в вики CitusDB.
Наиболее распространенной причиной этой ошибки является то, что инструменты, использующие драйверы ODBC/JDBC, обычно пытаются использовать оператор PREPARE по умолчанию, который в настоящее время не поддерживается CitusDB. Это очень легко решить, понизив версию протокола JDBC или ODBC, чтобы избежать использования операторов PREPARE.
Для драйверов ODBC, в зависимости от используемого вами драйвера / инструмента, иногда есть возможность отключить операторы PREPARE. В качестве альтернативы, вы можете просто вернуть протокол к версии 7.2, что почти всегда возможно.
Для драйверов JDBC точные шаги зависят немного больше от конкретного драйвера. Но вы почти всегда можете установить protocolVersion как 2 либо в свойствах драйвера, либо указав его в строке подключения.
PgJDBC использует подготовленные операторы на стороне сервера, и похоже, что этот инструмент "citusdb" не поддерживает их.
Попробуйте установить порог подготовки, чтобы PgJDBC не пытался подготовить операторы; увидеть setPrepareThreshold
, Если я правильно помню, вы можете установить его с помощью p repareThreshold=0
вместо этого в URL JDBC, хотя это повлияет на все соединения.
Я также получил ту же проблему с CitusDB с интеграцией JDBC, но есть решение.
Вы дали версию протокола со строкой подключения, как
connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres?protocolVersion=2");
В настоящее время CitusDB JDBC работает только с протоколом версии 2.
Я получил результат, надеюсь, он решит вашу проблему.