Quiero cargar la extensión cube, pero es posible que ya esté cargada. Así que hago

CREATE EXTENSION IF NOT EXISTS cube;

Docs dicen que cuando se especifica SI NO EXISTE, no debería lanzar un error. Pero lo hace:

ff_postgres_1  | 2020-07-26 18:15:46.233 UTC [33] ERROR:  duplicate key value violates unique constraint "pg_extension_name_index"
ff_postgres_1  | 2020-07-26 18:15:46.233 UTC [33] DETAIL:  Key (extname)=(cube) already exists.
ff_postgres_1  | 2020-07-26 18:15:46.233 UTC [33] STATEMENT:  
ff_postgres_1  |                    CREATE EXTENSION IF NOT EXISTS cube;

¿Qué estoy haciendo mal aquí? Estoy ejecutando PostgreSQL 12.3

0
biryulin04 26 jul. 2020 a las 21:31

1 respuesta

La mejor respuesta

Puedes conseguir esto con las carreras. Si dos sesiones intentan crear la extensión al mismo tiempo, ninguno de los IF NOT EXISTS puede ver el otro todavía, así que ambos superan ese paso. El primero en insertar su fila en pg_extension gana, y los otros bloques. Y luego, una vez que se confirma la primera sesión, la segunda se desbloquea para fallar con este mensaje.

3
jjanes 26 jul. 2020 a las 21:48