Postgres扩展坞中的Unix套接字连接

szqfcxe2  于 2022-10-15  发布在  Unix
关注(0)|答案(0)|浏览(182)

我正在使用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。任何帮助都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题