Помогите зафиксить ошибку "postgres error SQLSTATE 26000"

Проблема в следующем:

SELECT id,
          planned_servers,
           country_id,
           traffic_manager_active,
           proxy_id,
           execution_date,
           status,
           created_at,
           updated_at,
           deleted_at
    FROM schedules
    WHERE execution_date <= now()
      AND status = $1
      AND deleted_at IS NULL

при попытке выполнить вышеописанный селект из базы данных, бд возвращает ошибку "ERROR: prepared statement "lrupsc_1_0" does not exist (SQLSTATE 26000)"

данная ошибка начала появлятся после обновления версии постгрес на сервере

В качестве ЯП используется Go для работы с постгрес библиотека https://github.com/jackc/pgx


Ответы (1 шт):

Автор решения: Bogdan Tkachuk

Проблема была в том что по умолчанию https://github.com/jackc/pgx кеширует подготовленные выражения и пытается потом вызывать их на уровне постгрес Постгрес же постоянно обновляет конекшн (а хранит подготовленные выражения только в рамках одного конекшна) Вот и получилась ситуация в которой драйвер все еще хранит prep statement, а в базе его нет.

Решение:

использовать SimpleProtocol при подключении к базе

func OpenPGX(pgConnString string) (*pgx.Conn, error) {
    connConfig, err := pgx.ParseConfig(pgConnString)
    if err != nil {
        return nil, err
    }
    connConfig.PreferSimpleProtocol = true // disable prepared statements caching by default
    return pgx.ConnectConfig(context.Background(), connConfig)
}
→ Ссылка