如何在 Postgres 上对非特权用户使用 UUID?
How to use UUID with unprivileged user on Postgres?
如何为 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.
最重要的是,它并没有说它无法使用,而是不允许使用非特权用户创建扩展。在 Docker 图像合成期间,您应该创建和/或启用所需的扩展。
官方 postgres docker 图像将执行放置在 /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
如何为 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.
最重要的是,它并没有说它无法使用,而是不允许使用非特权用户创建扩展。在 Docker 图像合成期间,您应该创建和/或启用所需的扩展。
官方 postgres docker 图像将执行放置在 /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