标签: psql

关闭 psql 交互式输出的寻呼机

我们从 PostgreSQL 8.3 切换到 9.0。也许这是一个新功能,或者只是一个配置更改,但是现在当命令(例如,\d tablename)的输出超过可见的垂直空间时,psql 似乎通过类似于less. 我找不到关闭这种行为的方法。有什么建议吗?谢谢。

PS 我正在使用 PuTTY 滚动缓冲区,Shift+PgUp/PgDn所以我不需要 psql 的分页。另外,当我按下qpsql 的分页时,它的输出完全从屏幕上消失(就像less在 bash 中运行后一样),从一般用例的角度来看这是错误的。

psql

63
推荐指数
5
解决办法
4万
查看次数

Postgres:执行sql文件时非零退出代码?

我正在编写一个 shell 脚本,它使用 2 种形式调用 psql……一种是通过命令(-c),另一种是通过文件(-f)。

例如 psql -c "创建表 foo (bar integer)"

psql -f foobar.sql

这些形式之间的一个区别是,如果遇到错误,通过命令 (-c) 的调用将返回非零退出代码,而通过文件 (-f) 的调用似乎总是返回零。

我想知道这种行为是否有解决方法?(即,如果在执行文件时发生错误,则返回非零值)。

谢谢。

postgresql sql database psql

35
推荐指数
2
解决办法
1万
查看次数

Postgres 角色最佳实践实施

各位,

我可以利用你的帮助使我的 Postgres 用户访问控制设计更好,更符合最佳实践。我正在帮助推出一个小型生产 Postgres 服务器,但我不是数据库管理员,所以我知道足够危险。

一台服务器安装了一次 Postgres v9.2。此安装托管多个数据库,每个数据库都完全服务于不同的“客户”。换句话说,customer1 不会,也不应该使用 database2,依此类推。在正常操作期间,每个数据库都由一个匹配的 CakePHP 实例访问,所有实例都与 Postgres 位于同一服务器上。虽然此部署可能会有优化,但我最感兴趣的是 Psql 角色。

根据我所读到的,似乎三种类型的角色是有意义的:

  • 具有非默认密码的超级用户 postgres
  • 没有日常维护、数据库创建、备份、恢复的超级用户权限的管理员角色。应该能够对所有客户数据库做任何事情。
  • 只能在其各自的数据库中进行 CRUD 的用户角色。如果清理实现,则可以容忍对他们自己的数据库的更多权限。

实现该设计是我不太自信的地方。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)

postgresql psql

24
推荐指数
1
解决办法
7449
查看次数

如何使用 psql 显示触发器的内容?

我知道我可以用\dft. 但是我怎么能看到一个具体的触发器呢?我想知道详细信息,例如执行触发器的事件、执行的函数等。

postgresql psql

20
推荐指数
2
解决办法
3万
查看次数

如何为psql指定客户端证书?

我有一个 Postgres 服务器,它的用户dev需要一个客户端证书才能登录。我正在使用命令psql "sslmode=require user=dev host=db.prod",它给了我psql: FATAL: connection requires a valid client certificate.

我知道证书在我的服务器上的位置。我的问题是,如何将客户端证书位置指定为psql

postgresql psql ssl-certificate

14
推荐指数
2
解决办法
3万
查看次数

使用 psql 命令行界面设置连接超时

有没有办法使用psqlcli 设置连接超时?如何使用以下命令将连接超时设置为 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该命令无效并且挂起很长时间。如果主机不正确,我需要命令快速失败。

postgresql psql

10
推荐指数
1
解决办法
1万
查看次数

pg_dump: [archiver (db)] 与数据库的连接失败:致命:用户“postgres”的对等身份验证失败

我正在尝试将我的 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 database-backup

7
推荐指数
1
解决办法
3万
查看次数

恢复前 psql 清空数据库

我想恢复 postgreSQL 数据库,但在此之前我需要清空恢复目标数据库。

有没有 psql 的选项来做到这一点?

现在我使用命令行如下:

psql -U postgres db_test < testdb.sql
Run Code Online (Sandbox Code Playgroud)

postgresql psql

6
推荐指数
1
解决办法
2万
查看次数

升级psql客户端哪个包?

我已将 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 上)

postgresql redhat psql

5
推荐指数
1
解决办法
1万
查看次数

`psql` 扩展模式等效于 `mysql`

我对以下事情感到沮丧:

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)

mysql postgresql command-line-interface psql echo

5
推荐指数
1
解决办法
681
查看次数

PSQL 64 位驱动程序错误

我在 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)

任何帮助都会很棒。

psql libraries apt

4
推荐指数
1
解决办法
666
查看次数

SSH 隧道到 postgres 数据库

目前我在远程开发服务器上开发。我通过 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 上监听。

postgresql ssh ssh-tunnel psql

3
推荐指数
1
解决办法
4375
查看次数

双端口转发 kubernetes + docker

概括:

我有一个运行 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 …

port-forwarding psql docker kubernetes kubectl

3
推荐指数
1
解决办法
3847
查看次数