标签: psql

为什么 pg_restore 忽略 --create ?错误:失败:致命:数据库“new_db”不存在

我正在尝试运行以下命令:

sshpass  -p "pass" ssh  x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db
Run Code Online (Sandbox Code Playgroud)

我得到:

failed: FATAL:  database "new_db" does not exist
Run Code Online (Sandbox Code Playgroud)

postgresql psql postgresql-9.3

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

是否有与 bash 的反向搜索历史相当的 psql?

我非常喜欢bash的反向搜索历史(Cr)(命令行功能):

从当前行开始向后搜索,并根据需要在历史记录中“向上”移动。这是一个增量搜索。

当我进入control-r时bash,我得到以下信息:

(reverse-i-search)`':
Run Code Online (Sandbox Code Playgroud)

而且我能够输入以前执行过的命令的字符,并仔细研究我正在寻找的内容。如果我出错了,我可以输入control-h擦除一个字符(相当于backspace)。

这个命令行功能使得引用以前执行的命令变得非常容易。我想知道psql. 我发现仅依赖control-pand是非常低效的control-n。

对于它的价值,我正在使用PostgreSQL 9.3.1 on x86_64-apple-darwin13.0.0, compiled by Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn), 64-bit- 通过Postgres.app获得。

postgresql psql command-line mac-os-x

22
推荐指数
1
解决办法
6951
查看次数

postgres:架构的权限被拒绝

我是 postgresql 的新手,如果您能就如何解决以下错误提出建议,我将不胜感激。

我发出了以下命令:

ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA doc FROM PUBLIC ;
ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA net FROM PUBLIC ;

ip_spotlight# GRANT USAGE ON SCHEMA doc TO netopsapp ;

ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA doc GRANT ALL ON TABLES TO netopsapp ;
ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA net GRANT ALL ON TABLES TO netopsapp ;
Run Code Online (Sandbox Code Playgroud)

以下是特权列表:

ip_spotlight# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------ …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions psql

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

无法使用用户 postgres 启动 psql “无法将目录更改为 /home/user ”

我犯了一个愚蠢的错误。我想为文件夹设置 postgres 权限,以便从数据库导出数据。所以我设置了类似的东西sudo chmod 777 -u postgres /home/user,然后我的主分区只有 root 权限,没有 root 权限什么都不能工作。我通过使用解决了这个问题sudo chown user /home/user,然后在Linux上的文件管理器中手动设置权限。这是非常愚蠢的,我不太了解如何为目录和用户分配权限。

现在的问题是,我无法再连接到我的数据库。

 ~ $ sudo -u postgres psql
[sudo] password for user: 
could not change directory to "/home/user"
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我想我想连接到 postgres 用户无法读取的文件夹中。

重新启动服务器也sudo service postgresql restart不起作用。

我正在使用 PostgreSQL 9.1。

postgresql permissions psql

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

为什么在 psql 中使用 \dt(+) 时看不到我的表 (PostgreSQL)?

我已经按照以下方式donor在架构中创建了表reference:

CREATE TABLE reference.donor (
    donor_code smallint PRIMARY KEY,
    donor_name character varying NOT NULL,
    donor_type smallint REFERENCES reference.donor_type (type_id),
    alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code)
);
Run Code Online (Sandbox Code Playgroud)

我已经按照以下方式填充了表格:

INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code)
SELECT donor_code, donor_name, donor_type, alpha_2_code
FROM reference.donor_template;
Run Code Online (Sandbox Code Playgroud)

当我运行时:

\dt+ reference.*
Run Code Online (Sandbox Code Playgroud)

在 psql 我看到reference.donor表:

                          List of relations
  Schema   |      Name      | Type  |  Owner   | Size  | Description 
-----------+----------------+-------+----------+-------+-------------
 reference | donor          | table | postgres | 16 kB | 
 reference | …
Run Code Online (Sandbox Code Playgroud)

schema postgresql psql table

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

将参数传递给 psql

我在 Postgres 8.3 中运行一个 plpgsql 脚本 - 我想通过 psql 将参数传递给这个脚本。我目前正在执行这样的脚本:

psql -d database -u user -f update_file.sql 
Run Code Online (Sandbox Code Playgroud)

我遇到了这个链接,它解释了 PGOPTIONS 环境变量,但这不适用于“自定义”参数。即我收到一个错误,因为该设置未在 postgres.conf 文件中列出。

-bash-3.2$ export PGOPTIONS='--pretend=true'
-bash-3.2$ psql -d my_db -f update_database.sql
psql: FATAL:  unrecognized configuration parameter "pretend"
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?理想情况下,我想避免环境变量...

postgresql psql

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

如何有条件地停止 psql 脚本(基于变量值)?

让我们考虑以下示例(从 psql 脚本开始):

\c :db_to_run_on

TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Run Code Online (Sandbox Code Playgroud)

现在,如果它通过命令运行

psql [connection details] -v db_to_run_on=\'dev_database\'
Run Code Online (Sandbox Code Playgroud)

然后它就会运行并且用户很高兴。但是,如果(她)他决定指定-v db_to_run_on=production_database怎么办?(让我们假设这可能发生,就像人们rm -rf / # don't try this at home!!!偶尔运行一样。)希望该表有一个新的备份......

所以问题出现了:如何检查传递给脚本的变量并根据它们的值停止进一步处理?

postgresql psql

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

PostgreSQL psql - 不工作但没有错误

我是 PostgreSQL 的完全菜鸟,所以我可能遗漏了一些非常明显的东西。

通过终端上的 psql 连接到我的本地数据库。我运行的任何命令来进行数据库更改,甚至一个简单的选择都不做任何事情。没有错误,只是没有结果。

我可以使用 shell 命令 createdb、dropdb 就好了。

有一个在 Ruby on Rails、RefineryCMS 中运行的站点,使用本地 PostgreSQL db,所以我知道该 db 有数据并且正在运行 - 我似乎无法通过 psql 查询或修改它。

我错过了什么?

Mac OS X Lion,第 9.2 页。

postgresql psql

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

Postgresql:设置默认的 psql 客户端编码

当我使用 连接到 Postgresql 数据库时psql,我经常收到以下消息:

=> SELECT * FROM question_view ;
ERROR:  character with byte sequence 0xd7 0x9e in encoding "UTF8" has no equivalent in encoding "LATIN1"
Run Code Online (Sandbox Code Playgroud)

按照这个SO answer,我知道我应该相应地更改客户端编码:

SET client_encoding = 'UTF8';
Run Code Online (Sandbox Code Playgroud)

client_encoding每次连接到数据库时更改都很麻烦。有没有办法在.pgpass文件中或其他任何地方永久配置此设置?

postgresql psql configuration encoding

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

如何在 psql cmd 执行中设置 search_path 默认值?

我正在寻找一个选项来为允许设置 search_path 的 psql 控制台连接创建别名命令,但我没有在 psql util 上找到任何选项,也没有在不退出的情况下执行命令的选项。任何的想法?

我想避免设置环境选项的先决条件,如果可能的话,有一个oneliner

postgresql psql

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