e-i*_*128 6 docker postgresql-10
如何为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.
Run Code Online (Sandbox Code Playgroud)
最重要的是,它并没有说它不可用,但不允许非特权用户创建扩展。在 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
Run Code Online (Sandbox Code Playgroud)
您不必将复杂的.sh脚本放入/docker-entrypoint-initdb.d/. 也可以将.sql-files 放在那里,这将由超级用户执行。
它将放置的脚本简化为:
CREATE EXTENSION "uuid-ossp";
Run Code Online (Sandbox Code Playgroud)
(IF EXISTS不会造成伤害,但也没有帮助,因为初始化只会在空数据库上执行。)
| 归档时间: |
|
| 查看次数: |
5412 次 |
| 最近记录: |