如何使用postgres在表中的第2列或第3列之后的表中添加新列?
我的代码如下所示
ALTER TABLE n_domains ADD COLUMN contract_nr int after owner_id
Run Code Online (Sandbox Code Playgroud) 这应该是一件相当简单的事情,但我正在努力.
我希望像这样生成一个表:
id organizationNumber name
但是,当我查看数据库时,我发现排序错误.有谁知道我如何强制hibernate/jpa生成正确排序的表?
desc Organization; +--------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | organizationNumber | varchar(255) | NO | UNI | NULL | | +--------------------+--------------+------+-----+---------+----------------+
这就是我的实体bean的样子:
@Entity
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name")
public class Organization {
private … 我有一张桌子:
MyTable
ID
FieldA
FieldB
Run Code Online (Sandbox Code Playgroud)
我想改变表并添加一列,如下所示:
MyTable
ID
NewField
FieldA
FieldB
Run Code Online (Sandbox Code Playgroud)
在MySQL中我会这样:
ALTER TABLE MyTable ADD COLUMN NewField int NULL AFTER ID;
Run Code Online (Sandbox Code Playgroud)
一条线,漂亮,简单,效果很好.我如何在微软的世界里做到这一点?
我有一个包含7列的表,其中5列将为null.我将有一个空列int,text,date,boolean,和money数据类型.该表将包含数百万行,其中包含许多空值.我担心空值会占用空间.
另外,你知道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它是否遵循指定的列顺序,或者它是否按字符对齐或性能的最佳顺序重新组织列?
我得到了一个大的(> 100M行)Postgres表,其结构为{integer,integer,integer,timestamp without time zone}.我期望一行的大小为3*整数+ 1*时间戳= 3*4 + 1*8 = 20字节.
实际上,行大小pg_relation_size(tbl) / count(*)= 52字节.为什么?
(不对表进行删除:pg_relation_size(tbl, 'fsm')〜= 0)
我们有一个遗留数据库模式,有一些有趣的设计决策.直到最近,我们才支持Oracle和SQL Server,但我们正在尝试添加对PostgreSQL的支持,这引发了一个有趣的问题.我搜索了Stack Overflow和其他互联网,我不相信这种特殊情况是重复的.
对于唯一约束中的可空列,Oracle和SQL Server的行为都相同,这实际上是在执行唯一检查时忽略NULL列.
假设我有以下表格和约束:
CREATE TABLE EXAMPLE
(
ID TEXT NOT NULL PRIMARY KEY,
FIELD1 TEXT NULL,
FIELD2 TEXT NULL,
FIELD3 TEXT NULL,
FIELD4 TEXT NULL,
FIELD5 TEXT NULL,
...
);
CREATE UNIQUE INDEX EXAMPLE_INDEX ON EXAMPLE
(
FIELD1 ASC,
FIELD2 ASC,
FIELD3 ASC,
FIELD4 ASC,
FIELD5 ASC
);
Run Code Online (Sandbox Code Playgroud)
在Oracle和SQL Server上,保留任何可为空的列NULL将导致仅对非空列执行唯一性检查.所以以下插入只能执行一次:
INSERT INTO EXAMPLE VALUES ('1','FIELD1_DATA', NULL, NULL, NULL, NULL );
INSERT INTO EXAMPLE VALUES ('2','FIELD1_DATA','FIELD2_DATA', NULL, NULL,'FIELD5_DATA');
-- These will succeed when they should violate …Run Code Online (Sandbox Code Playgroud) 我在那有确定某些国家(例如,几个布尔列的PostgreSQL数据库的表的工作published,visible等等).我想创建一个单独的状态列,它将以位掩码的形式存储所有这些值以及可能的新值.在这种情况下integer和之间有什么区别bit(n)吗?
这将是一个相当大的表,因为它存储用户通过Web界面创建的对象.所以我想我必须为这个列使用(部分)索引.
问题:
我在数据库中有与时间相关的数据,我正在努力以某种方式组织,构造和索引数据,以便用户可以有效地检索它; 即使简单的数据库查询也需要更长的时间
项目背景:
虽然这是一个纯数据库问题,但某些上下文可能有助于理解数据模型:
该项目围绕着对大型复杂机器进行研究.我对这台机器本身并不了解,但实验室里有传言说那里有一个磁通电容器 - 我想昨天,我发现薛定谔猫的尾巴悬在它旁边;-)
我们在机器运行时测量许多不同的参数,使用位于整个机器上的传感器,在一段时间内以一定的间隔在不同的测量点(所谓的点).我们不仅使用一个设备来测量这些参数,而且测量它们的整个范围; 他们的测量数据质量不同(我认为这涉及采样率,传感器质量,价格和我不关心的许多其他方面); 该项目的一个目的实际上是建立这些设备之间的比较.您可以将这些测量设备可视化为一堆实验室手推车,每个手推车都有许多连接到机器的电缆,每个电缆都提供测量数据.
数据模型:
每个参数的每个点和每个设备都有测量数据,例如在6天的时间内每分钟一次.我的工作是将数据存储在数据库中,并提供对它的有效访问.
简而言之:
项目数据库当然更复杂,但这些细节似乎与问题无关.
最初,我已将测量数据值建模为具有自己的ID作为主键; n:m测量数据索引和值之间的关系是一个单独的表,只存储了index:valueID对,但由于该表本身消耗了相当多的硬盘空间,我们将其消除并将值ID更改为存储ID的简单整数它属于的测量数据索引; 现在,测量数据值的主键由该ID和参数ID组成.
旁注:当我创建数据模型时,我仔细遵循常见的设计指南,如3NF和适当的表约束(如唯一键); 另一个经验法则是为每个外键创建一个索引.我怀疑测量数据索引/值表与'严格'3NF的偏差可能是我现在看到的性能问题的原因之一,但改变数据模型并没有解决问题.
DDL中的数据模型:
注意:此代码的更新在下面进一步说明.
下面的脚本创建了数据库和所有涉及的表.请注意,还没有明确的索引.在运行此操作之前,请确保您没有so_test使用任何有价值的数据调用数据库...
\c postgres
DROP DATABASE IF EXISTS so_test;
CREATE DATABASE so_test;
\c so_test
CREATE TABLE device
(
name VARCHAR(16) NOT NULL,
CONSTRAINT device_pk PRIMARY KEY (name)
);
CREATE …Run Code Online (Sandbox Code Playgroud) 在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) postgresql ×8
sql ×3
indexing ×2
null ×2
performance ×2
alter-table ×1
bitmask ×1
exists ×1
hibernate ×1
java ×1
jpa ×1
sqldatatypes ×1
storage ×1
t-sql ×1
types ×1