Postgresql Can';我无法访问docker入口点文件中创建的postgres扩展,直到我在psql中手动创建它
我正在尝试使用timescaledb扩展,因此我正在运行他们的 在docker入口点文件的最后一行中,我运行:Postgresql Can';我无法访问docker入口点文件中创建的postgres扩展,直到我在psql中手动创建它,postgresql,docker,docker-compose,timescaledb,Postgresql,Docker,Docker Compose,Timescaledb,我正在尝试使用timescaledb扩展,因此我正在运行他们的 在docker入口点文件的最后一行中,我运行: CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; 我验证它是否可用于psql中的\dx。当我尝试使用扩展时,我得到: 没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换 我发现我必须手动添加它,方法是execing到psql中并运行CREATE EXTENSION(如果不存在的话)timescaledb CASCADE
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
我验证它是否可用于psql中的\dx
。当我尝试使用扩展时,我得到:
没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换
我发现我必须手动添加它,方法是exec
ing到psql中并运行CREATE EXTENSION(如果不存在的话)timescaledb CASCADE代码>
我的入口点怎么了?为什么我必须在容器构建并运行之后手动创建扩展
编辑:以下是完整的入口点脚本:
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER test_user PASSWORD 'password123';
ALTER USER test_user WITH SUPERUSER; --needed to create timescaledb extension
CREATE DATABASE testdb OWNER test_user;
GRANT ALL PRIVILEGES ON DATABASE testdb TO test_user;
CREATE DATABASE tsdb OWNER test_user;
GRANT ALL PRIVILEGES ON DATABASE tsdb TO test_user;
ALTER USER test_user CREATEDB;
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
EOSQL
#/bin/bash
set-e
psql-v ON_ERROR_STOP=1——用户名“$POSTGRES_USER”免责声明:我不知道docker,但这似乎只与POSTGRES有关,而与docker本身无关
create extension
将在当前连接到的数据库psql
中创建扩展。看到脚本,这很可能是您连接到的默认数据库postgres
因此,扩展将在postgres
数据库中创建,而不是在testdb
数据库中创建
关于如何更改,您有两个选项:
1.使用模板1
数据库
在template1
数据库中创建的任何内容都将在随后创建的每个数据库中自动创建。因此,如果在创建测试数据库之前连接到模板数据库并运行create extension
,该扩展将自动可用:
psql-v ON\u ERROR\u STOP=1--dbname=template1--username“$POSTGRES\u USER”为了与前面的答案相呼应,TimescaleDB扩展是针对每个数据库应用的,因此如果运行CREATE extension if NOT EXISTS TimescaleDB CASCADE
无需首先使用\c yourdatabase
连接到所需的数据库,它会将扩展应用到默认数据库。有关安装后应用的分步说明,请参阅。您可以共享您的entrypoint脚本吗?我已编辑以添加entrypoint脚本。我在您的entrypoint中未看到任何postgresql server启动。这使我认为,在执行entrypoint时,实际的postgresql守护进程没有运行。