我可以使用列出所有模式中的所有表
> \dt *.*
Run Code Online (Sandbox Code Playgroud)
但这也列出了远远超过我关心的表的系统表。我想要我在公共模式和我定义的任何模式中创建的所有表(可能还有视图)。
我希望找到一种方法来做到这一点,而不必在我创建它们时将模式显式添加到搜索路径中,如下所述:
编辑:
根据接受的答案,我创建了以下视图:
create view my_tables as
select table_catalog, table_schema, table_name, table_type
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema');
Run Code Online (Sandbox Code Playgroud)
现在下面的命令给了我我想要的:
select * from my_tables;
Run Code Online (Sandbox Code Playgroud) 我管理一个大型(数百个演出)数据库,其中包含具有各种角色的表,其中一些包含数百万条记录。一些表只接收大量插入和删除,其他一些插入和大量更新。
数据库在 Debian 6.0 amd64 系统上的 PostgreSQL 8.4 上运行,具有 16 GB 的 RAM。
问题有时是桌子上的 autovacuum 过程,需要很长时间(几天)才能完成。我希望能够粗略地判断一个特定的vacuum 命令需要多长时间,以便能够决定是否取消它。此外,如果有 postgres 真空操作的进度指示器,那将非常有帮助。
编辑:
我不是在寻找防弹解决方案。对死元组的数量或必要的 I/O 字节数的粗略提示就足以决定。不知道什么时候VACUUM结束真的很烦人,无论如何。
我已经看到pg_catalog.pg_stat_all_tables有一个列表示死元组的数量。所以有可能有一个估计,即使这意味着一个人必须ANALYZE在之前的桌子上。在另一方面,autovacuum_vacuum_threshold与autovacuum_vacuum_scale_factor设置单独证明Postgres的本身知道一些有关变化对表的数量,并可能将其放在了DBA手中了。
我不确定要运行什么查询,因为当我运行时VACUUM VERBOSE,我看到不仅表,而且它们的索引也在被处理。
我的生产服务器(ubuntu 13.10)在 postgresql 9.1 上运行。
我想使用 9.3 的一些功能,因此想升级。
有人可以帮助我从 9.1 升级到 9.3,以便停机时间不超过 30 分钟。或者?
主要关注的是防止数据丢失或文件冗余。
我正在尝试运行以下命令:
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) 我可能在标题中问错了问题。以下是事实:
在我们基于 Django 的站点的管理界面上进行客户查询时,我的客户服务人员一直抱怨响应速度慢。
我们使用的是 Postgres 8.4.6。我开始记录慢查询,并发现了这个罪魁祸首:
SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%')
Run Code Online (Sandbox Code Playgroud)
此查询的运行时间超过 32 秒。下面是 EXPLAIN 提供的查询计划:
QUERY PLAN
Aggregate (cost=205171.71..205171.72 rows=1 width=0)
-> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0)
Filter: (upper((email)::text) ~~ '%DEYK%'::text)
Run Code Online (Sandbox Code Playgroud)
因为这是 Django ORM 从 Django Admin 应用程序生成的 Django QuerySet 生成的查询,所以我无法控制查询本身。索引似乎是合乎逻辑的解决方案。我尝试创建一个索引来加快速度,但没有任何区别:
CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text))
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我怎样才能加快这个查询?
postgresql performance index pattern-matching postgresql-8.4
n_live_tupand n_dead_tupin pg_stat_user_tablesor是什么意思pgstattuple?
如何在不运行的情况下设置我的数据库以将“日期”视为“MDY”:
SET datestyle = "ISO, MDY";
Run Code Online (Sandbox Code Playgroud)
每次我试图访问它?我使用的是 Postgresql 9.1 版,Ubuntu 12.04。我的系统区域设置,在数据库安装时设置为en_CA.utf8,我最近将其更改为en_US.utf8.
show lc_CTYPE
Run Code Online (Sandbox Code Playgroud)
返回:--> "en_CA.UTF-8"
但
show LC_CoLLATE
Run Code Online (Sandbox Code Playgroud)
返回:--> "en_CA.UTF-8"
我想获得有关一段时间内连接峰值数量的统计信息。
我知道这种pg_stat_activity观点,就像select count(*) from pg_stat_activity,但我认为这种方法不是很聪明。
是否有其他视图或表格可以提供我需要的信息?
在多对多关系上使用 join 时,结果会拆分为多行。我想做的是将连接的右侧转换为数组,因此结果是一行。
包含 3 个表的示例:
CREATE TABLE items (
id serial primary key,
title text
);
CREATE TABLE tags (
id serial primary key,
title text
);
CREATE TABLE items_tags (
item_id int references items(id),
tag_id int references tags(id),
primary key (item_id, tag_id)
);
Run Code Online (Sandbox Code Playgroud)
选择带有标签的项目时,我可以这样做:
SELECT i.id, i.title, i.title
FROM items i
INNER JOIN items_tags it
ON it.item_id = i.id
INNER JOIN tags t
ON t.id = it.tag_id;
Run Code Online (Sandbox Code Playgroud)
结果将显示为:
(1, "item n1", "sport")
(1, "item n1", "soccer")
(2, "item …Run Code Online (Sandbox Code Playgroud) 我无法在文档中找到如何JSONB在 PostgreSQL 中创建一个DEFAULT值为空 json 文档的列。
如何在CREATE TABLE定义中说明上述内容?
postgresql ×10
aggregate ×1
array ×1
date-format ×1
index ×1
json ×1
monitoring ×1
performance ×1
psql ×1
vacuum ×1