Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Can';我无法访问docker入口点文件中创建的postgres扩展,直到我在psql中手动创建它_Postgresql_Docker_Docker Compose_Timescaledb - Fatal编程技术网

Postgresql Can';我无法访问docker入口点文件中创建的postgres扩展,直到我在psql中手动创建它

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

我正在尝试使用timescaledb扩展,因此我正在运行他们的

在docker入口点文件的最后一行中,我运行:

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守护进程没有运行。