标签: postgresql

TOAST 桌上的真空

是否可以像普通表一样获得 TOAST 表的死/活元组数?

CREATE TABLE messages1 (message text);

INSERT INTO messages1
SELECT (SELECT 
        string_agg(chr(floor(random() * 26)::int + 65), '')
        FROM generate_series(1,10000)) 
FROM generate_series(1,10);

SELECT reltoastrelid::regclass 
 FROM pg_class 
 WHERE relname = 'messages1';

 DELETE FROM messages1
WHERE ctid IN (
    SELECT ctid
    FROM messages1
    ORDER BY 1
    LIMIT 6
);

postgres=# SELECT reltoastrelid::regclass 
postgres-#  FROM pg_class 
postgres-#  WHERE relname = 'messages1';
      reltoastrelid       
--------------------------
 pg_toast.pg_toast_147777
(1 row)


postgres=# select relname, vacuum_count, n_tup_del, n_live_tup, n_dead_tup from pg_stat_user_tables where relname='pg_toast.pg_toast_147777';
 relname | vacuum_count | n_tup_del …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

默认情况下,是否所有关系 DBMS 都将表元组存储在基于主键的聚集索引中?

所以我正在阅读 MySQL innoDB,它显然默认将表数据存储在基于主键的聚集索引 (b+tree) 上,并且元组位于该 b+tree 的叶子中

https://blog.jcole.us/2013/01/10/btree-index-structures-in-innodb/

我想知道所有著名的关系数据库管理系统(如PostgreSQL、Oracle、SQL 服务器、SQLite)都以相同的方式存储吗?通过基于主键创建聚集索引(b+tree)并将数据存储在树的叶子上?

数据库中主键上的聚集索引是否基本上意味着将基于主键的表存储在 B+tree 表上?

(抱歉,如果这是一个一般性问题,但我不能针对我提到的每个数据库提出 4-5 个单独的问题,如果您只知道其中一个或几个,请告诉我)

此外,如果它的数据库默认情况下不使用集群,您能否解释它如何构建文件,例如它们是否在主键上创建一个 b+树,其中叶子指向堆内的某种地址或... ?

编辑 :

到目前为止,我们得到了除 SQLite 之外的所有问题的答案,如果有人有任何关于表在默认情况下如何实际存储在 SQLite 中的信息,请告诉。

mysql postgresql sqlite oracle sql-server

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

按条件计算物品

在用户可以在多个设备上安装移动应用程序副本的应用程序中,我想知道每个用户拥有多少个 iphone 和多少个 android 应用程序。

我尝试了一个查询,例如

gv2=> SELECT userid, 
       COUNT(ALL version_identifier LIKE '%ios%'), 
       COUNT(ALL version_identifier LIKE '%android%') 
FROM gl.user_device 
GROUP BY userid;
                userid                | count | count 
--------------------------------------+-------+-------
 46d0f5b7-42b0-4aad-9162-1390c32cb06e |     7 |     7
 5d519794-abfe-4863-82d4-6da33db7637b |     7 |     7
 a81cff6b-30f2-4b6e-a5bf-b1a933904473 |     1 |     1
 b65f0708-0cd1-11e7-878b-06fa189da46b |     4 |     4
 94b91b02-ff43-4a9a-b317-037fa2a347d3 |     1 |     1
 a4cacd98-1216-4801-b058-b28b8fa632a9 |     8 |     8
(6 rows)
Run Code Online (Sandbox Code Playgroud)

这显然是错误的。

例如

gv2=> SELECT userid FROM gl.user_device WHERE version_identifier LIKE '%ios%';
                userid                
--------------------------------------
 5d519794-abfe-4863-82d4-6da33db7637b
(1 row)
Run Code Online (Sandbox Code Playgroud)

万一我需要支持 Postgres 10.1,但最好也支持 9.5.10,因为我有一个旧的生产数据库仍然在那个版本上。

postgresql count

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

逻辑复制到不同的模式名称

我们有 PostgreSQL 11 数据库,结构一数据库一模式(公共)。

dbname : production_one
schema : public

dbname : production_two
schema : public
Run Code Online (Sandbox Code Playgroud)

我想设置一个逻辑复制,以便它具有结构 一个数据库,多个架构如下:

dbname : prod_slave
schema : prod_one, prod_two
Run Code Online (Sandbox Code Playgroud)

是否可以进行上述逻辑复制?

我使用流式复制成功复制,但情况需要我们使用上述逻辑复制。

postgresql replication

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

pg_dump 自定义存档并创建备份日期

我有由pg_dump.

它是否包含备份创建日期?

我不能自己创建备份。我通过特定的网络频道收到存档文件。备份文件有接收日期时间戳,但没有在服务器上创建的日期。

postgresql pg-dump

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

IS NULL 上的 Postgres 部分索引不起作用

Postgres 版本

使用 PostgreSQL 10.3。

表定义

CREATE TABLE tickets (
  id bigserial primary key,
  state character varying,
  closed timestamp
);

CREATE INDEX  "state_index" ON "tickets" ("state")
  WHERE ((state)::text = 'open'::text));
Run Code Online (Sandbox Code Playgroud)

基数

该表包含 1027616 行,其中 51533 行具有state = 'open'closed IS NULL或 5%。

条件为 on 的查询state按预期使用索引扫描执行良好:

explain analyze select * from tickets where state = 'open';

Index Scan using state_index on tickets  (cost=0.29..16093.57 rows=36599 width=212) (actual time=0.025..22.875 rows=37346 loops=1)
Planning time: 0.212 ms
Execution time: 25.697 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index postgresql-10 postgresql-performance

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

未找到 pg_resetxlog 命令

我在 /usr/bin 下找不到 pg_resetxlog。

postgres (PostgreSQL) 10.7 (Ubuntu 10.7-1.pgdg16.04+1)

cd /usr/bin
postgres@node-1:/usr/bin$ ./pg_resetxlog
-su: ./pg_resetxlog: No such file or directory
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-10

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

PostgreSQL 中注释的最大长度是多少?

PostgreSQL 有一个特殊的功能,称为COMMENT将元数据附加到标识符或任何类型(模式、表、列、函数、类型、域等)。看起来像这样,

COMMENT ON TABLE mytable IS 'This is my table.';
Run Code Online (Sandbox Code Playgroud)

评论有最大尺寸吗?

postgresql metadata comments

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

(POSTGRES) ON CONFLICT ... WHERE 条件似乎不起作用

我们正在尝试使用旧表中的信息为新功能填充新表,但我们将多次将此查询作为脚本运行,因为我们想要捕获任何用户更新的数据。

表 1 架构。

table1
id | email | first_name | last_name | job | phone | user_id | institution_id | institution_type | completion_state | created_at | updated_at | mobile_phone | deleted_at
----+-------+------------+-----------+-----+-------+---------+----------------+------------------+------------------+------------+------------+--------------+------------
Run Code Online (Sandbox Code Playgroud)

表 2 架构。

table2
 id | contact_id | status | data | created_at | updated_at | source_updated_at
----+------------+--------+------+------------+------------+-------------------
Run Code Online (Sandbox Code Playgroud)

这是我的查询


INSERT INTO table2 AS iic (contact_id, data, created_at, updated_at, source_updated_at)
SELECT
  cc.id,
  (
  SELECT row_to_json(_) FROM (
    SELECT
      cc.email,
      cc.first_name,
      cc.last_name,
      cc.job,
      cc.phone,
      cc.user_id,
      cc.institution_id,
      cc.institution_type,
      cc.completion_state,
      cc.updated_at, …
Run Code Online (Sandbox Code Playgroud)

postgresql query

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

如何在 AWS RDS Postgresql 中设置 wal_level?

我如何知道wal_level我的 AWS RDS Postgres 11.1 数据库有哪些?

我检查了“参数组”,但无法找到wal_level.

一经发现,如何更改?

postgresql aws

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