你会使用什么sql语句(用户postgres将执行),这样postgres用户就不可能user1删除(drop)数据库?
或者我可以在某些配置文件中添加规则吗?
我想使用 WAL 归档来增量备份我的数据库。但我的服务器上有两个数据库,但我无力承担用于备份这两个数据库的磁盘空间。所以我只想备份其中之一。我在 PostgreSQL 文档或其他任何地方都没有找到有关多个数据库的任何信息。或者我没有找到任何关于指定 WAL 备份的数据库名称的信息。如果有人可以帮助我,我将不胜感激。
我在 PostGreSql 数据库中有一个表定义如下:
CREATE TABLE public."MATCH"(
"ITEM_A_ID" bigint DEFAULT 0,
"ITEM_B_ID" bigint DEFAULT 0,
"OWNER_A_ID" bigint DEFAULT 0,
"OWNER_B_ID" bigint DEFAULT 0,
"OTHER_DATA" varchar(100) NOT NULL DEFAULT ''
CONSTRAINT "MATCH_PK" PRIMARY KEY ("ITEM_A_ID","ITEM_B_ID")
);
Run Code Online (Sandbox Code Playgroud)
它将包含很多行。将会对该表执行很多类似以下的查询:
SELECT * FROM "MATCH" WHERE "OWNER_A_ID" = owner_a_id;
SELECT * FROM "MATCH" WHERE "OWNER_B_ID" = owner_b_id;
Run Code Online (Sandbox Code Playgroud)
我正在考虑在OWNER_A_ID和上创建索引OWNER_B_ID,因为这些列不是键。这是一个好主意吗?如果是,我应该如何创建它们?我应该为两列创建一个索引吗?我应该创建两个索引吗?我应该包括其他列吗?
我的 Postgres 数据库中有一个表 (t0),其中的数据如下所示:
t1_id t2_id
1 1
2 1
2 1
4 null
4 null
5 null
Run Code Online (Sandbox Code Playgroud)
我有一个查询要返回我想要的结果:
t1_id t2_id
1 1
4 null
5 null
Run Code Online (Sandbox Code Playgroud)
我的查询看起来像这样:
(
SELECT DISTINCT ON (t2_id) t1_id, t2_id
FROM t0
WHERE t2_id IS NOT NULL
)
UNION ALL
(
SELECT DISTINCT ON (t1_id) t1_id, t2_id
FROM t0
WHERE t2_id IS NULL
)
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来执行这样的操作?这还不错,但是我在几个地方(使用连接)这样做,所有这些重复的查询似乎都会减慢速度。看来必须有更好的办法了。
这是小提琴形式的查询:http://sqlfiddle.com/#!15 /d41d8/3603
当检测到死锁时,我正在异步创建多个表。两张表(表 A 和 B)都与一张表(表 C)有 FK,并且我在与表 C 的关系上遇到了死锁。
脚本
CREATE TABLE "TableA"
(
"Id" uuid NOT NULL,
"TableCId" uuid NOT NULL,
CONSTRAINT "PK_TableA_Id" PRIMARY KEY ("Id"),
CONSTRAINT "FK_TableA_TableC" FOREIGN KEY ("TableCId")
REFERENCES "TableC" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
CREATE TABLE "TableB"
(
"Id" uuid NOT NULL,
"TableCId" uuid NOT NULL,
CONSTRAINT "PK_TableB_Id" PRIMARY KEY ("Id"),
CONSTRAINT "FK_TableB_TableC" FOREIGN KEY ("TableCId")
REFERENCES "TableC" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION …Run Code Online (Sandbox Code Playgroud) 某些更新在大型 Postgres 表上花费的时间太长。鉴于这些条件:
...您可能会认为,相对于使用 Bitlocker 旋转媒体的预期,更新将花费合理的时间。我们不会创建更多数据,因此不需要在 HDD 上移动现有数据,只需覆盖它即可。其他索引应该不需要更改。等等,相反,经过20个小时不断的硬盘磨练,我厌倦了等待,停止了查询。如果我删除其他列上的所有索引并重新运行查询,则只需要大约 30 分钟。
为什么与此查询无关的列上的索引会使更新时间膨胀?
我正在寻找正确的语法来过滤组(即已被“d”的行组GROUP BY),其中至少一行符合特定条件。
例如,如果我想选择一个组,其中至少一行的 Fold_change 值大于 4,我希望这样可以工作:
HAVING ANY(rnaseq.fold_change) > 4
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
错误:“ANY”处或附近的语法错误
我怀疑这是因为Postgres 要求常量值位于左侧,但如果我以相反的方式执行此操作,则会收到此错误
4 < ANY(rnaseq.fold_change)
Run Code Online (Sandbox Code Playgroud)
错误:op ANY/ALL(数组)需要右侧数组
我可以让它工作的唯一方法是使用 array_agg 像这样:
4 < ANY(array_agg(rnaseq.fold_change))
Run Code Online (Sandbox Code Playgroud)
但与第一个示例相比,该语法相当混乱,并且必须为每个组手动创建一个数组,听起来根本没有效率。
有没有正确的方法可以在 postgres 中进行 HAVING ANY 操作?
我正在使用 pg_dump(9.2 数据库)来提取一个模式并将其加载到另一个数据库(9.4)中。
好吧,这是命令:
pg_dump -f file.sql -F plain --inserts -n 模式数据库
好的。我的命令完成得非常好,但是,它并没有将所有内容转储到名为 schema 的模式(在上面的示例中)。它将所有内容加载到公共环境中。
编辑:
为了使问题更清楚:
转储工作正常。经过检查,它正在将 my 转储schema.table到public.table。我希望将其恢复到架构,而不是公开的。
有什么解决这个问题的建议吗?
谢谢
我已获得 postgres 数据库的凭据,并被告知它有权创建新用户并授予他们访问表的权限。这句话只对了一半。
我想创建一个新用户:
create user foo login encrypted password 'bar';
commit;
Run Code Online (Sandbox Code Playgroud)
还行吧。现在我尝试向该用户授予对所选表的某些特定访问权限:
grant select, insert, update on table baz to foo;
Run Code Online (Sandbox Code Playgroud)
回应是[42501] ERROR: permission denied for relation baz。
似乎我被授予的该用户无法从我希望授予访问权限的表中进行选择。select * from baz还给出了 42501 错误。
该查询select distinct(grantor) from information_schema.role_table_grants;返回一个用户名(我们称之为“bob”)。我应该与鲍勃讨论获得我需要的权限吗?
给定 Postgres 中的表格,例如
CREATE TABLE t1 (
type text NOT NULL,
value int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
where typecould be A, BorC并给出一个任意的重复模式,如
A B B C B B
Run Code Online (Sandbox Code Playgroud)
如何查询表,以便首先根据模式然后根据值对结果进行排序?换句话说,第一行是A最低的value,第二行是B最低的value,第三行是B第二低的value,依此类推。如果我们用完了特定的类型,我们就移动到模式中的下一个字母(即如果我们没有更多的Cs 要返回,模式就会变成ABBBB)。
| 类型 | 价值 |
|---|---|
| 一种 | 1 |
| 乙 | 1 |
| 乙 | 2 |
| C | 1 |
| 乙 | 3 |
| 乙 | 4 |
| 一种 | 2 |
| 乙 | 5 |
| 乙 | 6 |
| 乙 | 7 |
| 乙 | 8 |
| 一种 | 3 |
| 乙 | 9 … |
postgresql ×10
backup ×2
index ×2
performance ×2
aggregate ×1
deadlock ×1
order-by ×1
permissions ×1
pg-dump ×1
transaction ×1
union ×1
update ×1