相关疑难解决方法(0)

在PostgreSQL中计算和节省空间

我有一个像pg这样的表:

CREATE TABLE t (
    a BIGSERIAL NOT NULL,               -- 8 b
    b SMALLINT,                         -- 2 b
    c SMALLINT,                         -- 2 b
    d REAL,                             -- 4 b
    e REAL,                             -- 4 b
    f REAL,                             -- 4 b
    g INTEGER,                          -- 4 b
    h REAL,                             -- 4 b
    i REAL,                             -- 4 b
    j SMALLINT,                         -- 2 b
    k INTEGER,                          -- 4 b
    l INTEGER,                          -- 4 b
    m REAL,                             -- 4 b
    CONSTRAINT a_pkey PRIMARY KEY (a)
);
Run Code Online (Sandbox Code Playgroud)

以上每行最多可添加50个字节.我的经验是,我需要另外40%到50%的系统开销,甚至没有任何用户创建的索引.所以,每行约75个字节.我将在表中有许多行,可能超过1450亿行,因此该表将推动13-14太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......

将 …

postgresql storage database-design bigdata

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

postgres表中列的顺序是否会影响性能?

在Postgres中,CREATE TABLE语句中列的顺序是否会影响性能?考虑以下两种情况:

CREATE TABLE foo (
  a      TEXT, 
  B      VARCHAR(512),
  pkey   INTEGER PRIMARY KEY,
  bar_fk INTEGER REFERENCES bar(pkey),
  C      bytea
); 
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE foo2 (
  pkey   INTEGER PRIMARY KEY,
  bar_fk INTEGER REFERENCES bar(pkey),
  B      VARCHAR(512),      
  a      TEXT, 
  C      bytea
);
Run Code Online (Sandbox Code Playgroud)

性能foo2会比foo列更好的字节对齐更好吗?当Postgres执行a时CREATE TABLE它是否遵循指定的列顺序,或者它是否按字符对齐或性能的最佳顺序重新组织列?

postgresql performance database-design

23
推荐指数
1
解决办法
4200
查看次数

数据库列中位标志的任何缺点?

请考虑以下表格:

CREATE TABLE user_roles(
    pkey         SERIAL PRIMARY KEY,
    bit_id       BIGINT NOT NULL,
    name         VARCHAR(256) NOT NULL,
);

INSERT INTO user_roles (bit_id,name) VALUES (1,'public');
INSERT INTO user_roles (bit_id,name) VALUES (2,'restricted');
INSERT INTO user_roles (bit_id,name) VALUES (4,'confidential');
INSERT INTO user_roles (bit_id,name) VALUES (8,'secret');

CREATE TABLE news(
    pkey          SERIAL PRIMARY KEY,
    title         VARCHAR(256),
    company_fk    INTEGER REFERENCES compaines(pkey), -- updated since asking the question
    body          VARCHAR(512),
    read_roles    BIGINT -- bit flag 
);
Run Code Online (Sandbox Code Playgroud)

read_roles是一个位标志,指定可以读取新闻项的某些角色组合.因此,如果我插入一个可以通过限制和机密读取的新闻项目,我会将read_roles设置为值为2 | 46或当我想要返回特定用户可以看到的新闻帖子时,我可以使用类似的查询.

select * from news WHERE company_fk=2 AND …
Run Code Online (Sandbox Code Playgroud)

sql sql-server oracle postgresql database-design

10
推荐指数
3
解决办法
8899
查看次数

我使用postgresql得到一个错误"无法写入临时文件的块....没有空间留在设备上......"

我正在运行一个非常大的查询,在表中插入了很多行,在一些较小的查询中划分了近800万行,但在某些时刻出现了错误:"我收到错误"无法写入块...临时文件没有空间留在设备上......"使用postgresql".我不知道是否需要在每次查询后删除临时文件以及如何执行此操作,或者是否与其他问题相关.

谢谢

postgresql temporary-files

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

优化Postgres删除孤立记录

采取以下两个表:

Table "public.contacts"
       Column       |            Type             |                       Modifiers                       | Storage  | Stats target | Description
--------------------+-----------------------------+-------------------------------------------------------+----------+--------------+-------------
 id                 | integer                     | not null default nextval('contacts_id_seq'::regclass) | plain    |              |
 created_at         | timestamp without time zone | not null                                              | plain    |              |
 updated_at         | timestamp without time zone | not null                                              | plain    |              |
 external_id        | integer                     |                                                       | plain    |              |
 email_address      | character varying           |                                                       | extended |              |
 first_name         | character varying           |                                                       | extended |              | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql query-optimization

9
推荐指数
1
解决办法
565
查看次数

Postgres 是否在更新时重写整行?

我们在 Windows 2008 Server 上运行 Postgres 9.0。有一个大表包含一bytea列,用于存储每行 0-5MB 的二进制数据:

CREATE TABLE files
(
  file_id serial NOT NULL,
  data bytea NOT NULL,
  on_disk boolean,
  CONSTRAINT files_pkey PRIMARY KEY (file_id)
)
Run Code Online (Sandbox Code Playgroud)

最近我们一直在更新每一行的 on_disk 字段(不涉及数据字段)。我们认为这已经占用了我们临时表空间(或其他东西)中的空间,原因有两个:

1) 我们开始在运行大型查询的系统的其他随机部分收到此错误:

ERROR: 53100: could not write block 92271 of temporary file
Run Code Online (Sandbox Code Playgroud)

2) 我们的可用空间在一周内从 ~7GB 下降到 1.5GB,这是不寻常的。

任何人都可以确认:

a) 在 postgres 中更新一行是否会导致它在不释放旧空间的情况下重写整个行(包括大型二进制数据)?这将解释我们的症状

b) 它是否在更改期间写入其他临时表空间,这也会占用空间?(我们可以强制释放临时空间吗?)

c) 有没有一种方法可以对这个表执行次要的布尔字段更新,而无需每次都重写行(&咀嚼磁盘空间)?

d) 我们可以在不重写整个表的情况下定期强制 postgres 释放已用空间吗?(我们已知的释放空间的方法涉及我们没有空间的表重写)

PS:是的,我们正在将我们的服务器迁移到具有更大存储空间的主机......这可能需要 1-2 个月的时间。

sql windows postgresql diskspace

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

PostgreSQL查询约束中允许值的列表?

给定一个名为PostgreSQL的表requests,该表具有名为的列status和类似这样的约束:

ALTER TABLE requests ADD CONSTRAINT allowed_status_types
  CHECK (status IN (
    'pending', -- request has not been attempted
    'success', -- request succeeded
    'failure'  -- request failed
  ));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,psql我可以提取有关此约束的信息:

example-database=# \d requests
                                          Table "public.example-database"
        Column        |            Type             |                             Modifiers
----------------------+-----------------------------+-------------------------------------------------------------------
 id                   | integer                     | not null default nextval('requests_id_seq'::regclass)
 status               | character varying           | not null default 'pending'::character varying
 created_at           | timestamp without time zone | not null
 updated_at           | timestamp without time zone | not …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql database-design check-constraints

6
推荐指数
2
解决办法
3041
查看次数

PostgreSQL:额外列的性能影响

给定一个大表(1000万到1亿行),添加一些额外(未编入索引)的列的最佳方法是什么?

  1. 只需添加列.
  2. 为每个额外列创建一个单独的表,并在要访问额外值时使用联接.

答案的变化取决于额外的列是密集的(大多数不是空的)还是稀疏的(大多数是空的)?

sql database postgresql performance

5
推荐指数
1
解决办法
3966
查看次数

具有页面布局的表大小

我在Oracle Linux Server 6.3版上使用PostgreSQL 9.2.

根据存储布局文档,页面布局包含:

  • PageHeaderData(24字节)
  • n项目的数量(索引项/表项)AKA ItemIdData(4字节)
  • 可用空间
  • n项目数量
  • 特殊空间

我测试它以制作一些公式来估计预期的表格大小......(TOAST概念可能会被忽略.)

postgres=# \d t1;

                      Table "public.t1"
    Column    ','         Type         ','         Modifiers
---------------+------------------------+------------------------------
 code          |character varying(8)    |not null
 name          |character varying(100)  |not null
 act_yn        |character(1)            |not null default 'N'::bpchar
 desc          |character varying(100)  |not null
 org_code1     |character varying(3)    |
 org_cole2     |character varying(10)   |

 postgres=# insert into t1 values(
'11111111', -- 8
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'Y',
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'111',
'1111111111');

postgres=# select * from pgstattuple('t1');
 table_len | tuple_count …
Run Code Online (Sandbox Code Playgroud)

postgresql storage database-design types

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

在Postgres中存储小型固定长度数组的最佳数据模型(使用SqlAlchemy)

我想存储一组每小时设定点.24个浮点数(0到1),用于将当天的小时数映射到强度值.

我可以:

  1. 有24列命名_0_23.(如何在Sqlalchemy中扩展db.Model以使用数字作为列名?)
  2. 有一个值表(id, value, hour_of_the_day).
  3. 使用postgres数组类型.(但似乎我不能拥有固定长度数组,我需要一些应用程序逻辑来获取/设置值.)

这些值将主要一起查询并缩放(以便范围0到1映射)自定义范围.

哪种型号更可取?

postgresql database-design sqlalchemy data-modeling python-3.x

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

为什么PostgreSQL(timescaledb)会占用更多的存储空间?

我是数据库的新手.最近我开始使用timecaledb,这是PostgreSQL的扩展,所以我猜这也与PostgreSQL有关.

我观察到一种奇怪的行为.我计算了我的表结构,1个时间戳,2个双倍,所以每行总共24个字节.我从csv文件导入(通过psycopg2 copy_from)2,750,182行.我手动计算的大小应该是63MB,但我查询timescaledb,它告诉我的表大小为137MB,指数大小为100MB,总237MB.我期待表格大小应该等于我的计算,但事实并非如此.任何的想法?

database postgresql timescaledb

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