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 ряд)

http://www.citusdata.com/downloads

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.

Я получил результат, надеюсь, он решит вашу проблему.

Другие вопросы по тегам