我正在尝试连接到为Django应用程序构建的Postgres。我可以在windows中很好地连接,但是当我们将它移到Linux服务器上进行生产时,它就停止工作了。我追踪到的是pyodbc不起作用。因此,在另一个脚本中,我一直试图在没有运气的情况下建立一个连接。我很确定Linux服务器正在运行Redhat (yum是安装程序,但我可以再次检查它是否重要)
下面是我尝试过的一些事情:安装unixODBC-devel
将DSN添加到用户sourcename /home/localUsername/.odbc.ini文件,如下所示:
[DSNName]
Description=Postgres Connection to Database
Driver=/usr/pgsql-10/lib/psqlodbc.so
Server=servername
Database=dbname
PWD=pass
UID=username运行odbcinst -q -d返回: PostgreSQL
我尝试过的python脚本(虽然目前使用解释器)
con = odbc.connect("DSN=DSNName")
con = odbc.connect("Driver={PostgreSQL};Uid=username;Pwd=pass; Server=servername;Port=5432)
con = odbc.connect("Driver={PostgreSQL Unicode(x64)};Uid=username;Pwd=pass; Server=servername;Port=5432)根据我尝试的驱动程序,我得到了三个错误中的一个:对于使用Unicode(x32)的驱动程序,我得到:
pyodbc.Error ('01000', "[01000] [unixODBC][Driver Manager]can't open lib 'PostgreSQL Unicode(x32)' : file not found ...我认为这意味着这个驱动程序没有安装,这是很好的。
对于DSN方法,我得到:
pyodbc.OperationalError: ('08001', '[08001] FATAL: role:"localUsername" does not exists\n (101) (SQLDriverConnect)')第二个错误似乎让我认为(可能是错误的)它试图使用我的localUsername对Postgres进行身份验证,而此时我想使用为主机设置的特殊管理用户名。
对于第三个选项(PostgreSQL):
pyodbc.OperationalError 08001 FATAL: database "dbname" does not exist我不明白为什么会这样?我的第一个想法是Linux希望使用不同的端口进行连接。在windows环境下,我可以使用5432端口,并且工作正常。因此,假设其余的工作正常,我不知道如何让它找到DB。
如果你需要更多的细节,让我知道,我会尝试添加它们。
编辑:在一个服务器上有python (和Django)。DB在另一台。
尝试运行psql -h OSServername -U 'username‘,并使用相同的:角色错误/DB未找到错误。我觉得我在OSServername之后一定需要一些东西,比如'OsServername/pgAdminServer‘,但这行不通。
通过右键单击pgAdmin内部的一个db服务器名称并选择属性,可以找到DB 'username‘。pgAdmin中的服务器名称是否不同,是否需要将pgAdmin服务器名称作为连接字符串的一部分使用?
如注释所示,从psql -h命令开始似乎是一个很好的起点,因为它消除了python的复杂性。一旦我能使该命令正常工作,我可能能够修复其余的命令。当我的Linux服务器名(主机名)是'LinuxName',pgAdmin服务器是'pgAdminServer',实际DB有一个名称'dbName',而pgAdmin用户名是' username‘时,我应该输入什么?'dbName‘有一个所有者' owner’,它不同于pgServer的用户名,也不同于我在其中签名的Linux用户名。我还验证了“pgAdminServer”显示端口5432,所以这不应该是问题所在。
编辑2:我让pyodbc.connect('Driver={PostgreSQL};Server=servNm;Uid=uid;pwd=pwd;Database=db')开始工作了。现在只需要DSN方法的最后一步。您的dump_dsn在我的dsn文件(本地主目录中的.odbc.ini)中找到了一个错误。所以这很有帮助。还是找不到数据库。/etc/odbcinst.ini中的文件列出了以下驱动程序,我已经在我的DSN文件中尝试过这三个驱动程序:
/usr/pgsql-10/lib/psqlodbc.so
/usr/pgsql-10/lib/psqlodbca.so
/usr/pgsql-10/lib/psqlodbcw.so以下是我在home/user/ .odbc.ini中的.odbc.ini文件中的信息:变量: servNm、uid、db和pwd与我现在正在工作的pyodbc.connect()字符串中的变量完全匹配。
[DSNName]
Description=Postgres Connection to Database
Driver=/usr/pgsql-10/lib/psqlodbc.so
Server=servNm
CommLog=0
Debug=0
Fetch=100
UniqueIndex=1
UseDeclareFetch=0
Database=db
UID=uid
Username=uid
PWD=pwd
ReadOnly=0发布于 2022-03-24 16:53:52
我也有同样的问题。我想找几种解决办法,但都没有用。
这个问题比我想象的更容易解决:
1-删除有关postgresodbc的所有包:
$ sudo apt-get remove odbc-postgresql2-按以下相同顺序安装两个库:
$ apt-get install libcppdb-postgresql0 odbc-postgresql享受吧!
这样做在这里非常有效。
https://stackoverflow.com/questions/66285501
复制相似问题