Как использовать UUID с непривилегированным пользователем на Postgres? - PullRequest
0 голосов
/ 02 ноября 2019

Как сделать значение по умолчанию для строк uuid ?, функция uuid_generate_v4() работает, только если расширение uuid-ossp включено, но не может быть включено.

postgres=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION
postgres=# SELECT uuid_generate_v4();
           uuid_generate_v4           
--------------------------------------
 929d5e41-d7a8-408a-b0e9-feecf10d853d
(1 row)
...
demo=> select uuid_generate_v4();
ERROR:  function uuid_generate_v4() does not exist
LINE 1: select uuid_generate_v4();
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
demo=> CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ERROR:  permission denied to create extension "uuid-ossp"
HINT:  Must be superuser to create this extension.

1 Ответ

1 голос
/ 02 ноября 2019

Кроме того, в нем не сказано, что его нельзя использовать, но нельзя создавать расширение для непривилегированного пользователя. Во время компоновки образа Docker вы должны создать и / или включить необходимые расширения.

Официальные образы докера postgres будут выполнять скрипт, который находится в папке /docker-entrypoint-initdb.d/.

Если вы используете официальный образ какбазовый образ (рекомендуется), вы просто создаете файл .sh, назначаете исполняемый флаг (chmod 755) и добавляете его в папку /docker-entrypoint-initdb.d/.

Надеемся, это будет работать:

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname="$POSTGRES_DB"<<-EOSQL
   CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
EOSQL
...