小编Lua*_*ynh的帖子

pg_column_size(table.*) 和 pg_column_size(table.col1) + pg_column_size (table.col2) 的区别

来自PG DOC

pg_column_size(any) :用于存储特定值(可能是压缩的)的字节数 pg_column_size 显示用于存储任何单个数据值的空间

例子:

select pg_column_size(5::smallint);    -- 2 bytes 
select pg_column_size(5::int);         -- 4 bytes 
Run Code Online (Sandbox Code Playgroud)

输入pg_column_size,它可以是一列或一行,所以我创建了一个测试来检查它。这是我的测试:

我的桌子

CREATE TABLE index_test
(
  id integer NOT NULL,  -- 4  bytes 
  a integer,            -- 4  bytes 
  b integer,            -- 4  bytes 
  CONSTRAINT index_test_id PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)

1/ 第一个查询: sum(pg_column_size(table.rows))

with abc as 
(
 select id,a,b
 from index_test where b > 100
)
select pg_size_pretty(sum(pg_column_size(abc.*))) from abc  -- "348 kB", abc.* = record
Run Code Online (Sandbox Code Playgroud)

和查询的解释:

"Aggregate  (cost=427.55..427.56 rows=1 width=24) (actual time=9.171..9.171 …
Run Code Online (Sandbox Code Playgroud)

postgresql

8
推荐指数
1
解决办法
1万
查看次数

生成并插入 100 万行到简单表中

描述:

我尝试在 MSSQL 2012 Express 上将 100 万行插入到空表中。这是我的脚本:

-- set statistics time off
drop table t1
create table t1 (id int, a text, b text) 
go

-- #1 - 1,000,000 - 30s -> 45s
with ID(number) as
(
    select 1 as number
    union all
    select number + 1
    from ID
    where number < 1000000 + 1
)
insert into t1
    select number, 'a_' + cast (number as varchar), 'b_' + cast (number/2 as varchar)
    from ID  
    option(maxrecursion 0)


-- #2 …
Run Code Online (Sandbox Code Playgroud)

sql-server

8
推荐指数
2
解决办法
4万
查看次数

过滤数组 text[] 并按时间戳排序

描述

Linux 上的 PostgreSQL 9.6,tags_tmp表大小~ 30 GB(1000 万行),tags是一个text[]并且只有 6 个值。

tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)

我需要使用 filter ontagsorder byon检索数据maker_date desc。我可以在两tags & maker_date desc列上创建索引吗?

如果没有,你能提出其他想法吗?

查询示例

select id, tags, maker_date, value
from tags_tmp
where  tags && array['a','b']
order by maker_date desc
limit 5 offset 0
Run Code Online (Sandbox Code Playgroud)

SQL 代码:

create index idx1 on tags_tmp using gin (tags);
create …
Run Code Online (Sandbox Code Playgroud)

postgresql performance order-by index-tuning postgresql-performance

8
推荐指数
1
解决办法
6302
查看次数

如何求和之前的总和,例如 N = (N-1) + (N-2) + ... + 1?

我有一个表名“ TABLE_A ( id integer, no integer) ”。

我想用“id”和当前的“no sum of no”=以前的“no sum of no”对“no”求和

这是我的代码:

1/创建表并插入数据:

create table table_a (id int, no int);

insert into table_a values(1, 10);
insert into table_a values(1, 20);
insert into table_a values(1, 30);
insert into table_a values(2, 100);
insert into table_a values(2, 200);
insert into table_a values(2, 300);
insert into table_a values(3, 1);
insert into table_a values(3, 2);
insert into table_a values(3, 3);
insert into table_a values(3, 3);
Run Code Online (Sandbox Code Playgroud)

2/ 预期结果:

id | sum_of_no …
Run Code Online (Sandbox Code Playgroud)

postgresql join

7
推荐指数
2
解决办法
1万
查看次数

一个事实有多少个日期维度

关于设计星型模式:我在事实表中有三个日期列fact_table (insert_date, trade_date, close_date ...)。而且我不知道应该创建多少个日期维度?

在此处输入图片说明

案例 1:昏暗 A 。这意味着:一行@fact_table 有三个 FK 到 A。

情况 2:Dim A(用于 insert_date)、Dim B(trade_date)、Dim C(close_date)。这意味着:一行@fact_table 有一个 FK 到 A,一个 FK 到 B,一个 FK 到 C。

问题:应该创建多少个日期维度?

data-warehouse

6
推荐指数
1
解决办法
1万
查看次数

Postgres 消耗大量 RAM(缓存)

我在 Centos 6 x64(RAM:8 GB)上有一个小型数据库 PostgreSQL (v9.3)。

postgresql.conf

max_connections = 512
shared_buffers = 3000MB  
temp_buffers = 8MB          
work_mem = 2MB          
maintenance_work_mem = 128MB         
effective_cache_size = 3000MB
Run Code Online (Sandbox Code Playgroud)

大约 150 个连接,PostgreSQL 需要超过 6 GB 的 RAM(当然,其他应用程序使用大约 200 MB 的 RAM),这里是我的信息:

Mem:  7062.945M total, 6892.410M used,  170.535M free, 6644.000k buffers
Swap:    0.000k total,    0.000k used,    0.000k free, 5378.922M cached
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么 PG 需要大量 RAM?

  2. 如何减少 PG 的缓存缓冲区?

postgresql configuration enterprisedb

1
推荐指数
2
解决办法
6236
查看次数

PostgreSQL kill - Sighup pid

为了重新加载配置文件,我们向 postmaster 发送 SIGHUP 信号,然后将其传递给所有连接的后端。这就是为什么有些人将重新加载服务器称为“叹息”的原因。

由于重新加载配置文件是通过发送 SIGHUP 信号来实现的,因此我们可以使用 kill 命令为单个后端重新加载配置文件

首先,使用 pg_stat_activity 找出后端的 pid。然后,从操作系统提示符处发出以下命令:

kill  -SIGHUP pid
Run Code Online (Sandbox Code Playgroud)

我看不懂粗体字。因为我们有很多后端 PID,如果我们杀死一个 PID,它如何从重新加载配置文件(postgresql.conf)中获取更改?

postgresql postgresql-9.1

0
推荐指数
1
解决办法
2271
查看次数