我正在使用Flyway来版本我的数据库和Postgres停靠器的状态。我正在尝试运行/docker-entry-initdb.d/中的脚本,希望在Postgres监听TCP之前运行该脚本。该脚本创建scadb数据库并运行一个Flyway迁移,但是我在连接到运行postgres的Unix套接字时遇到了问题。我知道在/docker-entry-initdb.d/中运行的任何脚本都不能通过TCP连接到postgres,所以我使用的是junixSocket v2.4.0;为了通过Unix套接字连接,我将JunixSocket JAR文件放在/<flyway_DIR>/驱动程序中。但是,我得到以下错误:
Flyway Community Edition 7.9.2 by Redgate
ERROR:
Unable to obtain connection from database (jdbc:postgresql://localhost:5432/scadb) for user 'postgres': The SocketFactory class provided org.newsclub.net.unix.AFUNIXSocketFactory could not be instantiated.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08006
Error Code : 0
Message : The SocketFactory class provided org.newsclub.net.unix.AFUNIXSocketFactory could not be instantiated.
Caused by: org.postgresql.util.PSQLException: The SocketFactory class provided org.newsclub.net.unix.AFUNIXSocketFactory could not be instantiated.
Caused by: java.lang.InstantiationException
版本:
- 波斯格雷斯码头:波斯格雷斯:11.14-阿尔卑斯山
- 飞行路线:7.9.2
如果在postgres运行并侦听tcp之后,我在postgres停靠器中运行相同的脚本,则该脚本使用tcp参数运行得很好。
以下是在/docker-入口点-initdb.d/中运行的脚本:
# !/bin/bash
ENDPOINT="${ENDPOINT:-127.0.0.1}"
PORT="${PORT:-5432}"
USERNAME="${USERNAME:-postgres}"
USER_PASSWD="${USER_PASSWD:-postgres}"
DB_NAME="${DB_NAME:-scadb}"
echo $ENDPOINT:$PORT:*:$USERNAME:$USER_PASSWD > ~/.pgpass
chmod 600 ~/.pgpass
#
# Create Database SCADB which flyway cannot do
#
echo "SELECT 'CREATE DATABASE scadb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${DB_NAME}')\gexec" | psql -U $USERNAME
#
# flyway migrate
#
PROFILE="${1:-default}"
flyway -url=jdbc:postgresql://localhost/scadb -jdbcProperties.socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg -jdbcProperties.socketFactoryArg=/var/run/postgresql/.s.PGSQL.5432 -jdbcProperties.sslMode=disable migrate -locations=filesystem:/viab/ddl/$PROFILE/init/ -user=postgres -password=postgres -configFiles=/viab/ddl/$PROFILE/init.public.conf
如果我从/<FLEYWAY_DIR>/DRIVERS中删除junix套接字JAR文件,我会得到
原因:java.lang.ClassNotFoundException:org.News club.net.unix.AFUNIXSocketFactory
而不是java.lang.InstantiationException,所以我认为我安装的junix套接字是正确的。我知道,在postgres服务启动并侦听TCP之后,我可以将flyway脚本作为单独的实体运行,但在/docker-entry-initdb.d/中运行flyway脚本非常适合我的情况。
我遵循了https://kohlschutter.github.io/junixsocket/dependency.html中的junix套接字的postgres用法说明,但我无法继续处理连接问题。我不清楚为什么它无法示例化org.News club.net.unix.AFUNIXSocketFactory。任何帮助都将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!