在mysql命令行中,按Control-C将取消程序,并使您返回到 bash。在psql, postgres 中,它将终止当前查询并且不会停止 psql 程序。有没有办法Control-C在 mysql 程序中获得 psql 风格的行为?我一直发现自己Control-C被习惯逼迫,不得不重新登录 mysql。
Control C不会杀死 bash,并在您按下它时将您注销。我认为这是一件好事。Control-C意思是“停止你正在做的事情”。
有没有办法给 postgres 数据库一个别名?
本质上,我需要一个数据库来操作两个名称,这样我就可以对 DB_ALPHA 和 DB_ONE 进行查询,并且它们会产生完全相同的效果。我在 MySQL 中通过在同一目录中放置一个指向数据库的符号链接来完成此操作。我无法在 postgres 中找到与此解决方案等效的解决方案。
我感谢您的帮助!谢谢!
我看到的奇怪且极其缓慢的 IO 模式是这样的(输出iostat -dxk 1 /dev/xvdb1):
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.99 0.99 7.92 3.96 12.00 1.96 2206.00 502.00 99.41
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 100.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 100.40 …Run Code Online (Sandbox Code Playgroud) 我定期保存并稍后恢复用于测试的小型 PostgreSQL 数据库。它的数据作为测试的结果定期更新,然后必须进行新的转储,并且定期使用转储以良好定义的状态重新创建数据库。
我注意到转储(使用pg_dump -Fc database)只需要几秒钟,但恢复(pg_restore -d database)需要大约一分钟。这看起来很奇怪。我本来希望两者花费大约相同的时间(假设两个任务都是 I/O 绑定的)。
还原有问题吗?我可以让它更快吗?或者恢复比转储花费更长的时间是否正常?(如果是,那为什么?)
转储文件通常有大约 3-4 MiB;DBMS 是 PostgreSQL V8.4,在 Ubuntu Linux 下运行在 Pentium4 3GHz 和 1GiB RAM 上。
在 PostgreSQL 上设置一个 100 TB 的数据库(实际上大约 90 TB)而不在多个节点之间进行数据分片是否现实?是否有任何关于类似设置的成功案例/示例?
我正在使用 posgtres 的内部日志轮换机制。我希望删除超过 30 天的日志文件。我如何让 postgres 做到这一点?如果 postgres 不支持它,我可以将 logrotate 设置为只删除 30 天以上的日志吗?
我目前的配置是:
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_truncate_on_rotation = off
log_rotation_age = 1440
log_rotation_size = 0
Run Code Online (Sandbox Code Playgroud) 首先,我是 Vagrant 和 Postgres 的新手。
我使用http://files.vagrantup.com/lucid32.box创建了我的 Vagrant 实例,没有任何问题。我能够运行vagrant up并且vagrant ssh没有问题。
我按照说明做了一个小改动,我安装了“postgresql-8.4-postgis”包而不是“postgresql postgresql-contrib”。
我使用以下方法启动服务器:
postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start
Run Code Online (Sandbox Code Playgroud)
在连接到 vagrant 实例时,我可以使用它psql来毫无问题地连接到实例。
在我的 Vagrantfile 中,我已经添加了:
config.vm.forward_port 5432, 5432
Run Code Online (Sandbox Code Playgroud)
但是当我尝试从本地主机运行 psql 时,我得到:
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)
我确定我错过了一些简单的东西。有任何想法吗?
更新:
我找到了对此类问题的引用,文章建议使用:
psql -U postgres -h localhost
Run Code Online (Sandbox Code Playgroud)
我得到:
psql: server closed the connection unexpectedly
This probably means the server terminated …Run Code Online (Sandbox Code Playgroud) 使用 PostgreSQL 9.1.2
我看到过多的 CPU 使用率和大量的 postmaster 任务写入磁盘。即使我的应用程序几乎什么都不做(每分钟插入 10 次),也会发生这种情况。但是,有合理数量的连接打开。
我一直在尝试确定我的应用程序中是什么导致了这种情况。我对 postgresql 很陌生,到目前为止还没有到任何地方。我在我的配置文件中打开了一些日志选项,并查看了 pg_stat_activity 表中的连接,但它们都处于空闲状态。然而,每个连接消耗约 50% 的 CPU,并且正在向磁盘写入约 15M/s(不读取任何内容)。
我基本上是使用股票 postgresql.conf 进行很少的调整。我很感激任何关于我可以做些什么来追踪这个问题的建议或指示。
这是 top/iotop 向我展示的示例:
Cpu(s): 18.9%us, 14.4%sy, 0.0%ni, 53.4%id, 11.8%wa, 0.0%hi, 1.5%si, 0.0%st
Mem: 32865916k total, 7263720k used, 25602196k free, 575608k buffers
Swap: 16777208k total, 0k used, 16777208k free, 4464212k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17057 postgres 20 0 236m 33m 13m R 45.0 0.1 73:48.78 postmaster
17188 postgres 20 0 …Run Code Online (Sandbox Code Playgroud) 我们在 PostgreSQL 配置方面遇到了一些问题。经过一些基准测试后,我发现非常简单的查询需要相对较长的时间,经过进一步检查,实际的 COMMIT 命令似乎非常慢。
我使用下表进行了一个非常简单的测试:
CREATE TABLE test (
id serial primary key,
foo varchar(16),
);
Run Code Online (Sandbox Code Playgroud)
在打开所有语句的登录后,我运行了以下查询 10000 次:
BEGIN;
INSERT INTO test (a) VALUES ('bar');
COMMIT;
Run Code Online (Sandbox Code Playgroud)
BEGIN 和 INSERT 需要 < 1ms 才能完成,但 COMMIT 平均需要 22ms 才能完成。
在我自己的 PC 上运行相同的基准测试,它慢得多,对 BEGIN 和 INSERT 语句产生相同的平均值,但平均 COMMIT 大约为 0.4 毫秒(快 20 倍以上)。
经过一番阅读后,我尝试使用该pg_test_fsync工具来确定问题所在。在服务器上,我得到以下结果:
$ ./pg_test_fsync -o 1024
1024 operations per test
O_DIRECT supported on this platform for open_datasync and open_sync.
Compare file sync methods using one 8kB write: …Run Code Online (Sandbox Code Playgroud) 今天,我通过 apt.postgresql.org 在 Ubuntu precision 上安装了 Postgresql 9.2——一切都相对轻松,直到我陷入“无效的语言环境名称:it_IT.utf8”错误:
root@ubuntu:/tmp# sudo -u postgres psql -Xc "CREATE DATABASE test TEMPLATE template0 ENCODING 'utf8' LC_CTYPE='it_IT.utf8'"
ERROR: invalid locale name: "it_IT.utf8"
Run Code Online (Sandbox Code Playgroud)
我确实跑locale-gen it_IT.utf8了,事实上:
root@ubuntu:/tmp# locale -a
C
C.UTF-8
en_GB.utf8
en_US.utf8
it_IT.utf8
POSIX
Run Code Online (Sandbox Code Playgroud)
日志似乎没有关于为什么 postgres 无法识别 it_IT.utf8 的任何有意义的信息...你能帮忙吗?
postgresql ×10
performance ×4
database ×2
hard-drive ×2
linux ×2
ubuntu ×2
iostat ×1
keyboard ×1
log-files ×1
logging ×1
logrotate ×1
mysql ×1
ubuntu-12.04 ×1
vagrant ×1