Postgres "СОЗДАТЬ ТАБЛИЦУ КАК (ВЫБРАТЬ ...)" застряло - PullRequest
7 голосов
/ 06 августа 2020

Я использую Python с psycopg2 2.8.6 против Postgres 11.6 (также пробовал на 11.9)

Когда я выполняю запрос

CREATE TABLE tbl AS (SELECT (row_number() over())::integer "id", "col" FROM tbl2)

Код застревание (cursor.execute никогда не возвращается), завершение транзакции с помощью pg_terminate_backend удаляет запрос с сервера, но код не освобождается. Однако в этом случае целевая таблица создается.

Ничто не блокирует транзакцию. Внутренний запрос SELECT сам по себе был протестирован, и он работает хорошо.

Я попытался проанализировать подсказки на сервере и обнаружил внутри pg_stat_activity следующее:

  • Транзакция state is idle in transaction
  • wait_event_type is Client
  • wait_event is ClientRead

Тот же эффект происходит, когда я запускаю запрос из редактора SQL (pgModeler), но в этом случае запрос зависает в состоянии «Ожидание» и создается целевая таблица.

Я не уверен, что не так и как действовать дальше . Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

просто удалите ( ) вокруг SELECT...

https://www.postgresql.org/docs/11/sql-createtableas.html

...