我正在尝试运行以下命令:
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) 我非常喜欢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 的新手,如果您能就如何解决以下错误提出建议,我将不胜感激。
我发出了以下命令:
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) 我犯了一个愚蠢的错误。我想为文件夹设置 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。
我已经按照以下方式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) 我在 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)
还有其他想法吗?理想情况下,我想避免环境变量...
让我们考虑以下示例(从 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 连接到我的本地数据库。我运行的任何命令来进行数据库更改,甚至一个简单的选择都不做任何事情。没有错误,只是没有结果。
我可以使用 shell 命令 createdb、dropdb 就好了。
有一个在 Ruby on Rails、RefineryCMS 中运行的站点,使用本地 PostgreSQL db,所以我知道该 db 有数据并且正在运行 - 我似乎无法通过 psql 查询或修改它。
我错过了什么?
Mac OS X Lion,第 9.2 页。
当我使用 连接到 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文件中或其他任何地方永久配置此设置?
我正在寻找一个选项来为允许设置 search_path 的 psql 控制台连接创建别名命令,但我没有在 psql util 上找到任何选项,也没有在不退出的情况下执行命令的选项。任何的想法?
我想避免设置环境选项的先决条件,如果可能的话,有一个oneliner
postgresql ×10
psql ×10
permissions ×2
command-line ×1
encoding ×1
mac-os-x ×1
schema ×1
table ×1