相关疑难解决方法(0)

如果所有列值都为true,则返回true

在PostgreSQL中有一种更快的方法来基本上在几行中执行if吗?

说我有一张桌子

ticket | row | archived
1      | 1   | true
1      | 2   | true
1      | 3   | true
2      | 1   | false
2      | 2   | true
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以在ticket =的列下面做一个if语句?因此,ticket = 1的地方是真的

true && true && true = true
Run Code Online (Sandbox Code Playgroud)

并且ticket = 2将是假的,因为

false && true = false
Run Code Online (Sandbox Code Playgroud)

或者我应该坚持下去

SELECT ( (SELECT COUNT(*) FROM table WHERE ticket = 1)
       = (SELECT COUNT(*) FROM table WHERE ticket = 1 AND archived = true) )
Run Code Online (Sandbox Code Playgroud)

sql postgresql boolean-logic exists aggregate-functions

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

在PostgreSQL中不使用NULL仍然在标题中使用NULL位图?

显然,PostgreSQL在每个数据库行标题中存储了几个值.

如果我不在该表中使用NULL值 - 是否仍然存在空位图?
定义列有NOT NULL没有区别?

postgresql null storage database-design

13
推荐指数
1
解决办法
3827
查看次数

在PostgreSQL中将varchar更改为boolean

我已经开始研究一个项目,那里有一个相当大的表(大约82,000,000行),我觉得它非常臃肿.其中一个字段定义为:

consistency character varying NOT NULL DEFAULT 'Y'::character varying
Run Code Online (Sandbox Code Playgroud)

它用作布尔值,值应始终为('Y'|'N').

注意:没有检查约束等.

我试图找出理由改变这个领域的理由.这是我有的:

  • 它被用作布尔值,所以就这样吧.显式优于隐式.
  • 它将防止编码错误,因为现在任何可以转换为文本的内容都会在那里盲目进行.

这是我的问题.

  • 尺寸/存储怎么样?db是UTF-8.所以,我认为在这方面确实没有多少节省.对于a boolean,它应该是1个字节,而对于'Y'UTF-8中的a 应该是1个字节(至少这是我在Python中检查长度时得到的).这里是否还有其他存储空间可以保存?
  • 查询性能?Postgres会因" =TRUE"与" ='Y'"的原因而获得任何性能提升吗?

postgresql storage database-design query-optimization postgresql-9.1

12
推荐指数
1
解决办法
9193
查看次数

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

请考虑以下表格:

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
查看次数

我可以在Heroku上的5 MB PostgreSQL中存储多少条记录?

我要将记录存储在一个包含2个字段的表中:

  • id - > 4个字符

  • password_hash - > 64个字符

我可以在Heroku上的5mb PostgreSQL中存储多少个像上面那样的记录?

PS:给定一个包含x列且长度为y的表 - 如何计算数据库中的空间?

postgresql storage database-design heroku

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

postgresql:md5消息摘要的数据类型?

我想使用某些字符串的MD5消息摘要作为表的主键.我应该为这样的字段使用什么数据类型?我应该为该领域写什么selectinsert陈述?

database postgresql database-design

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

跨多个列的排列的唯一postgres约束

给出Postgres数据库中的以下三列:第一,第二,第三; 如何创建约束以使排列是唯一的?

例如,如果('foo', 'bar', 'shiz')存在于db中,('bar', 'shiz', 'foo')则将其排除为非唯一.

sql postgresql database-design constraints unique-constraint

9
推荐指数
2
解决办法
780
查看次数

基准:PostgreSQL上的bigint vs int

我想提高我的数据库性能.在项目中,所有表从去intbigint,我认为这是一个不错的选择,不仅对于存储,因为int需要4 bytesbigint要求8 bytes;而且还涉及性能.所以我创建了一个包含1000万个条目的小表,其中包含一个脚本Python:

import uuid

rows=10000000

output='insert_description_bigint.sql'
f = open(output, 'w')

set_schema="SET search_path = norma;\n"
f.write(set_schema)

for i in range(1,rows):
    random_string=uuid.uuid4()
    query="insert into description_bigint (description_id, description) values (%d, '%s'); \n"
    f.write(query % (i,random_string))
Run Code Online (Sandbox Code Playgroud)

这就是我创建two表格的方式:

-- BIGINT

DROP TABLE IF EXISTS description_bigint;

CREATE TABLE description_bigint
(
  description_id BIGINT PRIMARY KEY NOT NULL,
  description VARCHAR(200),
  constraint description_id_positive CHECK (description_id >= 0)
);

select count(1) from …
Run Code Online (Sandbox Code Playgroud)

postgresql int performance bigint sqldatatypes

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

如何计算Postgresql中的最大列

我想知道在postgresql表中计算最大列数的正确方法是什么.它在他们的网站上说:

每个表250 - 1600的最大列数取决于列类型

那么,根据列类型,我如何确定最大列?

sql postgresql

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

计算元组大小

我试图了解列顺序如何最小化PostgreSQL中的表大小.

例:

CREATE TABLE test (
 column_1 int
,column_2 int
,column_3 bigint
,column_4 bigint
,column_5 text
,column_6 text
,column_7 numeric(5,2)
,column_8 numeric(5,2)
,column_9 timestamp
,column_10 boolean
,column_11 boolean
);

INSERT INTO test
  VALUES(1,1,1,1,'test','test_1',12,12,current_timestamp,true,false);

SELECT pg_column_size(test.*) FROM test;

 pg_column_size 
----------------
       82
    (1 row)
Run Code Online (Sandbox Code Playgroud)

元组大小:

元组头的23字节开销+ NULL位图的1字节,因此:

24 + 4 + 4 + 8 + 8 + 5 + 7 + 5 + 5 + 8 + 1 + 1 = 80但实际元组大小为82.

是否有2字节的额外开销?

我理解下面链接给出的例子:
在PostgreSQL中计算和节省空间

如果我们删除column_8 numeric(5,2)那么那么元组大小保持不变,即:82.

我重新排序表以最小化元组大小并给出80.

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

postgresql storage database-design

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