我想在 postgresql 14 中描述一个表模式。但是,当我使用 old 时\d+
,会抛出错误:
pgsql=# \d+ <table_name>
ERROR: column c.relhasoids does not exist
LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...
提前致谢!
我想在 postgresql 14 中描述一个表模式。但是,当我使用 old 时\d+
,会抛出错误:
pgsql=# \d+ <table_name>
ERROR: column c.relhasoids does not exist
LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...
提前致谢!
如果您使用旧psql
版本连接到较新的服务器版本,某些命令可能会失败,因为psql
在建立连接时会通知您。这正是您在那里工作时看到的。
psql
从您的 v14 安装中调用,一切都会正常工作。如果您不知道如何操作,请卸载所有旧版本的 PostgreSQL。
与之前的两个答案一样,您的主机中有两个版本的psql,默认是较旧的版本,与当前数据库版本 14 不兼容。
临时修复:
bash-4.2$ psql --version
psql (PostgreSQL) 9.2.24
bash-4.2$ which psql
/usr/bin/psql
bash-4.2$ cd /usr/pgsql-13/bin
bash-4.2$ ls -ltr|grep psql
-rwxr-xr-x 1 root root 644264 May 13 2021 psql
bash-4.2$ /usr/pgsql-13/bin/psql --version
psql (PostgreSQL) 13.3
bash-4.2$ /usr/pgsql-13/bin/psql
Pager usage is off.
psql (13.3)
Type "help" for help.
postgres=#
永久修复
如果您希望作为新版本的现有数据库的psql为默认值,您可以使用“update-alternatives”实用程序。就像这里提到的: 如何纠正 psql 版本和 postgresql 版本的不匹配?
我就是这样做的。
[root@ip-10-211-209-252 bin]# pwd
/usr/bin
[root@ip-xxxx bin]# mv psql psql9
[root@ip-xxxx bin]# update-alternatives --install /usr/bin/psql psql /usr/bin/psql9 1
[root@ip-xxxx bin]# cd /usr/pgsql-13/bin
[root@ip-xxxx bin]# ls -ltr|grep psql
-rwxr-xr-x 1 root root 644264 May 13 2021 psql
[root@ip-xxxx bin]# update-alternatives --install /usr/bin/psql psql /usr/pgsql-13/bin/psql 2
[root@ip-xxxx bin]# update-alternatives --config psql
There are 3 programs which provide 'psql'.
Selection Command
-----------------------------------------------
*+ 1 /usr/pgsql-13/bin/psql
2 /usr/bin/psql
3 /usr/bin/psql9
Enter to keep the current selection[+], or type selection number: 1
[root@ip-xxxx bin]#
\d+
在 Postgres14 上工作得很好。也许您使用的是旧版本的psql
. 没有前向兼容性。如果你想使用 PostgreSQL14,你应该使用psql
Postgres14 及更高版本。您可以通过以下方式检查--option
:
[pavel.stehule@pgsql ~]$ psql --version
psql (PostgreSQL) 9.6.23