如何在 PostgreSQL 中列出表的所有约束(主键、检查、唯一互斥、..)?
错误的全文如下:
psql:无法连接到服务器:没有这样的文件或目录。服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接?
这是我第二次在我的 Mac 上通过 Homebrew 设置 Postgresql,我不知道发生了什么。以前,它一直在工作。在某些时候,我一定输入了一个把事情搞砸的命令。我不确定。现在,每当我从命令行输入 SQL 命令时,我都会收到上述消息。我已经运行了一个命令来检查服务器是否正在运行,但显然不是。如果我尝试使用启动服务器
$ postgres -D /usr/local/pgsql/data
我收到以下错误:
postgres 无法访问服务器配置文件“/usr/local/pgsql/data/postgresql.conf”:没有这样的文件或目录
我已经通过 Homebrew 卸载并重新安装了 Postgresql,但问题仍然存在。我完全不知道如何让它工作。任何帮助,将不胜感激。
我有一个 Postgres 数据库,其中包含有关服务器集群的详细信息,例如服务器状态(“活动”、“备用”等)。活动服务器在任何时候都可能需要故障转移到备用服务器,我不关心具体使用哪个备用服务器。
我想要一个数据库查询来更改备用服务器的状态 - 只是一个 - 并返回要使用的服务器 IP。选择可以是任意的:因为服务器的状态会随着查询而改变,选择哪个备用服务器并不重要。
是否可以将我的查询限制为一次更新?
这是我到目前为止所拥有的:
UPDATE server_info SET status = 'active'
WHERE status = 'standby' [[LIMIT 1???]]
RETURNING server_ip;
Postgres 不喜欢这样。我能做些什么不同的事情?
我在 mysql 中有 MM 复制,我想在框中挤出一些可用空间来删除不必要的文件,我在里面遇到了这些mysql-bin
文件/var/db/mysql/
有数百个这样的文件mysql-bin.000123
,mysql-bin.000223
等等。我已经通过做检查了 mysql 复制show master status
,show slave status
它们是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩余的,将不再使用。在这种情况下,除了复制当前指向的文件之外,删除所有这些 mysql-bin 文件是否安全?
如果删除是安全的,那么有什么办法可以在这些文件不使用时自动删除它们?
我有一个 PostgreSQL 表。select *
非常慢,但又select id
好又快。我认为可能是行的大小非常大并且需要一段时间才能传输,或者可能是其他一些因素。
我需要所有字段(或几乎所有字段),因此仅选择一个子集并不是快速解决方法。选择我想要的字段仍然很慢。
这是我的表架构减去名称:
integer | not null default nextval('core_page_id_seq'::regclass)
character varying(255) | not null
character varying(64) | not null
text | default '{}'::text
character varying(255) |
integer | not null default 0
text | default '{}'::text
text |
timestamp with time zone |
integer |
timestamp with time zone |
integer |
文本字段的大小可以是任意大小。但是,在最坏的情况下,不超过几千字节。
问题
- 这有什么叫“疯狂低效”的吗?
- 有没有办法在 Postgres 命令行中测量页面大小来帮助我调试它?
REINDEX
我为数据库中的索引编写了一个脚本。这是其中之一:
echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
exit 1
fi
问题是我无法在独立模式下运行此脚本。psql
每次运行都提示密码。还有两个限制:
我无法在没有密码的数据库上创建用户。
因为
REINDEX
锁表,我应该sleep <num>
在 each 之间使用REINDEX
。
有没有自动解决方案?
我必须编写一个简单的查询,在其中查找以 B 或 D 开头的人名:
SELECT s.name
FROM spelers s
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
我想知道是否有办法重写它以提高性能。所以我可以避免or
和/或like
?
我记得读过一篇关于数据库设计的文章,我还记得它说你应该有 NOT NULL 的字段属性。我不记得为什么会这样。
我所能想到的似乎是,作为应用程序开发人员,您不必测试 NULL和可能不存在的数据值(例如,字符串的空字符串)。
但是对于日期、日期时间和时间(SQL Server 2008),您会怎么做?你必须使用一些历史性的或触底的日期。
对此有什么想法吗?
Unix 时间戳是自 1970 年 1 月 1 日午夜 UTC 以来的秒数。
如何从 PostgreSQL 获取正确的 unix 时间戳?
与currenttimestamp.com和timestamp.1e5b.de进行比较时,我没有从 PostgreSQL 获得预期时间:
这将返回正确的时间戳:
SELECT extract(epoch from now());
虽然这不是:
SELECT extract(epoch from now() at time zone 'utc');
我住在 UTC +02 时区。从 PostgreSQL 获取当前 unix 时间戳的正确方法是什么?
这将返回正确的时间和时区:
SELECT now();
now
-------------------------------
2011-05-18 10:34:10.820464+02
另一个比较:
select now(),
extract(epoch from now()),
extract(epoch from now() at time zone 'utc');
now | date_part | date_part
-------------------------------+------------------+------------------
2011-05-18 10:38:16.439332+02 | 1305707896.43933 | 1305700696.43933
(1 row)
Unix timestamp from the web sites:
1305707967
我一直在我们的 MS SQL 数据库上运行一个自动索引工具(我修改了一个源自 Microsoft 的脚本,它查看索引统计表 -自动自动索引)。从统计数据中,我现在有一个需要创建的索引的建议列表。
编辑: 上述索引从 DMV 获取信息,这些信息告诉您数据库引擎将在索引可用时将其用于索引,并且脚本采用 Top x 建议(通过搜索、用户影响等)并将它们放在一个表中。
(上面的编辑部分取自拉里科尔曼的回答,以澄清脚本在做什么)
由于我是数据库管理员的新手,并且在网上进行了快速搜索,因此我不愿意冒险并盲目地添加推荐的索引。但是,由于没有该领域的经验,我正在寻找一些关于如何确定这些建议是否必要的建议。
我是否需要运行 SQL Profiler,还是最好检查查询表的代码?你还有什么其他建议吗?