我们从 PostgreSQL 8.3 切换到 9.0。也许这是一个新功能,或者只是一个配置更改,但是现在当命令(例如,\d tablename
)的输出超过可见的垂直空间时,psql 似乎通过类似于less
. 我找不到关闭这种行为的方法。有什么建议吗?谢谢。
PS 我正在使用 PuTTY 滚动缓冲区,Shift+PgUp/PgDn
所以我不需要 psql 的分页。另外,当我按下q
psql 的分页时,它的输出完全从屏幕上消失(就像less
在 bash 中运行后一样),从一般用例的角度来看这是错误的。
我正在编写一个 shell 脚本,它使用 2 种形式调用 psql……一种是通过命令(-c),另一种是通过文件(-f)。
例如 psql -c "创建表 foo (bar integer)"
psql -f foobar.sql
这些形式之间的一个区别是,如果遇到错误,通过命令 (-c) 的调用将返回非零退出代码,而通过文件 (-f) 的调用似乎总是返回零。
我想知道这种行为是否有解决方法?(即,如果在执行文件时发生错误,则返回非零值)。
谢谢。
各位,
我可以利用你的帮助使我的 Postgres 用户访问控制设计更好,更符合最佳实践。我正在帮助推出一个小型生产 Postgres 服务器,但我不是数据库管理员,所以我知道足够危险。
一台服务器安装了一次 Postgres v9.2。此安装托管多个数据库,每个数据库都完全服务于不同的“客户”。换句话说,customer1 不会,也不应该使用 database2,依此类推。在正常操作期间,每个数据库都由一个匹配的 CakePHP 实例访问,所有实例都与 Postgres 位于同一服务器上。虽然此部署可能会有优化,但我最感兴趣的是 Psql 角色。
根据我所读到的,似乎三种类型的角色是有意义的:
实现该设计是我不太自信的地方。DB与表的所有权以及谁应该从谁那里继承有点混乱。下面是我的数据库和我的用户。这些信息足以评估实施吗?
Role name | Attributes | Member of
-----------+------------------------------------------------+-------------------
admin | Create role, Create DB | {user1, user2}
postgres | Superuser, Create role, Create DB | {}
user1 | | {}
user2 | | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
admin | postgres …
Run Code Online (Sandbox Code Playgroud) 我知道我可以用\dft
. 但是我怎么能看到一个具体的触发器呢?我想知道详细信息,例如执行触发器的事件、执行的函数等。
我有一个 Postgres 服务器,它的用户dev
需要一个客户端证书才能登录。我正在使用命令psql "sslmode=require user=dev host=db.prod"
,它给了我psql: FATAL: connection requires a valid client certificate
.
我知道证书在我的服务器上的位置。我的问题是,如何将客户端证书位置指定为psql
?
有没有办法使用psql
cli 设置连接超时?如何使用以下命令将连接超时设置为 3 秒之类的低值:
PGPASSWORD=passwordhere psql -h 10.0.0.144 -U myuser -c "select 1" -d mydatabase
Run Code Online (Sandbox Code Playgroud)
据我所知,psql
不支持连接超时参数。在上面的示例中,10.0.0.144
该命令无效并且挂起很长时间。如果主机不正确,我需要命令快速失败。
我正在尝试将我的 Postgres 数据库备份到另一台服务器,但我一直被拒绝访问。
我的 pg_hba.conf 文件如下所示:
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain …
Run Code Online (Sandbox Code Playgroud) 我想恢复 postgreSQL 数据库,但在此之前我需要清空恢复目标数据库。
有没有 psql 的选项来做到这一点?
现在我使用命令行如下:
psql -U postgres db_test < testdb.sql
Run Code Online (Sandbox Code Playgroud) 我已将 Postgres 安装从 8.4 更新到 9.3。
现在,当我使用初始命令登录服务器时
sudo -u postgres psql template1
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
psql (8.4.18, server 9.3.5)
WARNING: psql version 8.4, server version 9.3.
Some psql features might not work.
Type "help" for help.
Run Code Online (Sandbox Code Playgroud)
我需要安装/升级什么软件包才能将 psql 升级到 9.4 版本?(在红帽 6 上)
我对以下事情感到沮丧:
0:33:1407402356:root@ahost:~# echo 'use wordpress_3_6_1; select * from wp_posts;'
| mysql -u mysqluser -pmysqlpasswdord | wc -l -L
42 40585
Run Code Online (Sandbox Code Playgroud)
SQL 查询结果被破坏得很丑陋。
PostgreSQLpsql
提供了 helper 特性扩展模式。看看它在行动:
postgres@ahost:~$ echo '\c openerp7-0 \\ select * from pg_shadow' | psql
You are now connected to database "openerp7-0" as user "postgres".
usename | usesysid | usecreatedb | usesuper | usecatupd | userepl |
passwd | valuntil | useconfig
----------+----------+-------------+----------+-----------+---------+----------
-------------------------+----------+-----------
openerp | 16384 | t | t | t | t …
Run Code Online (Sandbox Code Playgroud) 我在 Hyper-V 下设置了 Ubuntu 12.04 64 位服务器。我已经安装了 Pervasive 64 位 SQL 驱动程序,以便可以每天运行股票更新程序脚本(从另一台运行 Exchequer 软件/PSQL 数据库的本地服务器更新外部 MySQL 数据库)。
这些驱动程序似乎冲突,正如我在尝试运行任何 apt-get 命令时发现的那样:
apt-get update
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒。
目前我在远程开发服务器上开发。我通过 SSH 连接到开发服务器(使用 SSH 密钥)作为
ssh -p 22222 user@devbox.com
Run Code Online (Sandbox Code Playgroud)
然后从开发服务器,我通过本地网络连接到数据库
psql -U postgres -h psqldb -d my_database
Run Code Online (Sandbox Code Playgroud)
wherepsqldb
指向10.0.0.202
开发服务器的/etc/hosts
文件。
我想在我自己的电脑上开始本地开发。如何psqldb
通过使用远程开发服务器作为 SSH 隧道从本地机器连接到Postgres 服务器(或者有更好的方法来做到这一点)?
编辑
我没有提到我已经在本地服务器上安装了 Postgres 并在默认端口 5432 上监听。
概括:
我有一个运行 kubectl port-forward 的 docker 容器,将作为 k8s 服务运行的 postgres 服务的端口 (5432) 转发到本地端口 (2223)。在 Dockerfile 中,我暴露了相关端口 2223。然后我通过发布该端口来运行容器 ( -p 2223:2223
)
现在,当我尝试通过访问 postgres 时psql -h localhost -p 2223
,出现以下错误:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Run Code Online (Sandbox Code Playgroud)
但是,当我docker exec -ti
对上述容器执行操作并运行上述 psql 命令时,我能够连接到 postgres。
Dockerfile 命令:
EXPOSE 2223
CMD ["bash", "-c", "kubectl -n namespace_test port-forward service/postgres-11-2 2223:5432"]
Run Code Online (Sandbox Code Playgroud)
Docker 运行命令:
docker run -it --name=k8s-conn-12 -p 2223:2223 my_image_name:latest
Run Code Online (Sandbox Code Playgroud)
docker …
psql ×13
postgresql ×10
apt ×1
database ×1
docker ×1
echo ×1
kubectl ×1
kubernetes ×1
libraries ×1
mysql ×1
redhat ×1
sql ×1
ssh ×1
ssh-tunnel ×1