我有一个包含大约 1500 万条记录的表。现在我需要向表中添加一个索引。
添加索引需要一些时间来更新表中的每个条目。
我很困惑添加索引是否会导致停机。
如果是,那么我怎样才能克服停机时间?
如果我在 PostgreSQL 中同时创建了一个索引,我如何才能看到它何时完成?
我正在尝试重建索引以解决索引膨胀问题,我需要将旧索引保留一段时间直到新索引完成,所以我需要知道它何时完成。
这是 PostgreSQL 9.2/3ish
我TYPE在 PostgreSQL 中发现。我有一个TABLE TYPE某些表必须尊重的(接口)。例如:
CREATE TYPE dataset AS(
ChannelId INTEGER
,GranulityIdIn INTEGER
,GranulityId INTEGER
,TimeValue TIMESTAMP
,FloatValue FLOAT
,Status BIGINT
,QualityCodeId INTEGER
,DataArray FLOAT[]
,DataCount BIGINT
,Performance FLOAT
,StepCount INTEGER
,TableRegClass regclass
,Tags TEXT[]
,WeightedMean FLOAT
,MeanData FLOAT
,StdData FLOAT
,MinData FLOAT
,MaxData FLOAT
,MedianData FLOAT
,Percentiles FLOAT[]
);
Run Code Online (Sandbox Code Playgroud)
我可以使用此模板创建表:
CREATE TABLE test OF dataset;
Run Code Online (Sandbox Code Playgroud)
我在API 中看到了很多选项,但我有点迷茫。我想知道是否可以将此类型分配给函数INPUT/OUTPUT参数。
假设我有一个FUNCTION调用process,它从数据集中接收记录样本TABLE source,处理它们,然后返回TABLE sink具有相同TYPE.
那就是我想知道是否有可能创建一个TYPE …
给定两个数字nand m,我想生成一系列的形式
1, 2, ..., (n-1), n, n, (n-1), ... 2, 1
Run Code Online (Sandbox Code Playgroud)
并重复它m几次。
例如,对于n = 3and m = 4,我想要以下 24 个数字的序列:
1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1
---------------- ---------------- ---------------- ----------------
Run Code Online (Sandbox Code Playgroud)
我知道如何通过以下两种方法之一在 PostgreSQL 中实现此结果:
使用以下查询,该查询使用该generate_series函数,以及一些确保订单正确的技巧:
WITH parameters (n, m) AS
(
VALUES (3, 5)
)
SELECT
xi
FROM
(
SELECT
i, i …Run Code Online (Sandbox Code Playgroud) 让我们以表 peoples 为例,它只有 2 个字段:id 和 data(json)。
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Run Code Online (Sandbox Code Playgroud)
我想为“pos”字段创建约束,它必须是唯一的。我在互联网上搜索了 JSON 约束,但没有结果。
我该如何处理这个问题?
想象一下你有一个简单的表:
name | is_active
----------------
A | 0
A | 0
B | 0
C | 1
... | ...
Run Code Online (Sandbox Code Playgroud)
我需要创建一个特殊的唯一约束,该约束在以下情况下失败:相同is_active值不能共存不同的name值。
允许条件示例:
注意:简单的多列唯一索引不允许这样的组合。
A | 0
A | 0
B | 0
Run Code Online (Sandbox Code Playgroud)
允许条件示例:
A | 0
B | 1
Run Code Online (Sandbox Code Playgroud)
失败条件示例:
A | 0
A | 1
-- should be prevented, because `A 0` exists
-- same name, but different `is_active`
Run Code Online (Sandbox Code Playgroud)
理想情况下,我需要唯一约束或唯一部分索引。触发器对我来说更成问题。
双重A,0允许,但(A,0) (A,1)不是。
所以我觉得这应该是非常基本和容易做的事情,也许我只是没有正确地做事。
我想做相当于 SQL Server 备份的工作。我想创建一个完整的 .bak 文件并能够将数据库恢复到其原始状态。
到目前为止,我已经在 PgAdmin4 中尝试了许多不同的方法来从新创建的数据库创建备份文件。我迁移创建了一堆表的模式,然后对之前创建的文件执行还原。我期望恢复后我创建的所有表都消失了,我希望数据库处于我进行备份时的确切状态。
我尝试了许多不同的选项,例如包括在备份/恢复时保留/不保存数据的创建/删除数据库命令,但没有运气。
任何人都可以帮助我吗?
我正在使用命令pg_dump mydb -Fc > db和pg_restore db. 也许我缺少一些神奇的参数来完成我上面的要求?
试过了pg_restore --clean db,结果一样。
问题是我创建了我的数据库,里面什么都没有,备份它,创建一些表,恢复备份,我创建的表仍然存在。我想要一个恢复方法,使数据库处于与备份时相同的状态。
我想检查我可以访问的 Datasase 服务器上正在运行什么类型的 sql。我只能访问 Web 界面和表格列表。
通过该界面,我可以对列表中的表运行查询。
如何获取有关服务器和服务器正在运行的版本的更多信息。我不知道服务器正在运行的 IP 或端口。
我想知道服务器是 MySQL、Mircosoft SQL Server、Oracle SQL、Postgre SQL 还是其他 sql server。
我正在谈论的网站是这个: w3schools.com SQL editor。
编辑 2:虽然对于某些命令 select sqlite_version() 对我有用,但它不起作用。这是响应的屏幕截图。
编辑 3:在 Chromium 浏览器上,命令工作正常。但是在 Firefox 浏览器上,该命令不起作用。
我还提到我正在运行 Linux。
您认为在 Firefox 和 Chrome 上我得到不同结果的原因可能是什么?
Microsoft 当前允许使用此语法。
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)
请注意,没有GROUP BY中EXISTS条款,是有效的ANSI SQL。或者它只是暴露了一个实现细节。
作为参考,PostgreSQL 中不允许使用相同的语法。
错误:列“tx”必须出现在 GROUP BY 子句中或用于聚合函数中
但是这种语法是允许的..
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT 1 -- This changed from the first query
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) …Run Code Online (Sandbox Code Playgroud) 我的理解是更新锁定一个元组,将其标记为已删除,然后添加一个新元组。
换句话说,更新 = 删除 + 插入。
或者我曾经相信。但在 MVCC 中,更新与删除 + 插入之间似乎存在一些根本不同。
设置:
CREATE TABLE example (a int PRIMARY KEY, b int);
INSERT INTO example VALUES (1, 1);
Run Code Online (Sandbox Code Playgroud)
方法一:更新
CREATE TABLE example (a int PRIMARY KEY, b int);
INSERT INTO example VALUES (1, 1);
Run Code Online (Sandbox Code Playgroud)
方法二:删除插入
-- session A session B
BEGIN;
UPDATE example SET b = 2 WHERE a = 1;
DELETE FROM example WHERE a = 1;
COMMIT;
-- now there are 0 rows in table example (1 row was …Run Code Online (Sandbox Code Playgroud) postgresql ×10
concurrency ×3
sql-server ×3
functions ×2
index ×2
datatypes ×1
exists ×1
group-by ×1
json ×1
locking ×1
mvcc ×1
mysql ×1
pgadmin ×1
restore ×1
sql-standard ×1
sqlite ×1
t-sql ×1