我正在尝试以一种可重现的方式用一些测试数据填充数据库。
假设(一个过于简化的示例)三个基表:name、city、job 和两个关系表:name-city 和 name-job。我需要在三个基表中的每一个中创建一个条目,并使用上述条目在两个关系表中创建条目。
我已经拥有了一种使用一系列with查询在 3 个基表中创建条目并将值插入到一个关系表中的方法。
with x as
(INSERT INTO "public"."name" VALUES(DEFAULT) RETURNING "id"),
y as
(INSERT INTO "public"."job" VALUES(DEFAULT) RETURNING "id"),
z as
(INSERT INTO "public"."city" VALUES(DEFAULT) RETURNING "id")
INSERT INTO "public"."name-job"("name", "job")
select x.id, y.id from x,y;
Run Code Online (Sandbox Code Playgroud)
我真的想添加第二个插入语句
INSERT INTO "public"."name-city"("name", "city")
select x.id, z.id from x,z;
Run Code Online (Sandbox Code Playgroud)
第一次插入后,但不知道如何。我曾尝试用逗号分隔两个插入语句,并将它们括在括号中,然后用逗号分隔它们,以及其他一些方法,但没有任何效果。
使用带有第二个插入的全新语句并不完全是一种选择,因为我需要使用相同的 x、y、z 值。鉴于我缺乏专业知识/经验,我完全有可能遗漏了一些明显的东西......所以任何关于我如何做到这一点的想法,理想情况下,没有高度复杂的工具,将是最受欢迎的。
FWIW,我正在使用 Postgres (10.x)
我有一个 PostgreSQL 10 脚本,我想在开始时为其声明一次变量,然后在整个脚本中使用它们(带有可能的事务)。
我知道我可以做到:
DO $$
DECLARE test float := 0.1 ;
BEGIN
< do whatever here>
END $$
Run Code Online (Sandbox Code Playgroud)
但这使我每次有 BEGIN / END 块时都声明变量。
我们使用的是 PostgreSQL 10,我们需要重新索引表以重新组织数据和可用空间。
我们遇到的问题是此操作锁定了我们需要始终保持可用的表。
我们找到了一个解决方法,但这似乎比标准释放的空间少得多reindex,所以我们将其关闭。
是否有一些解决方案可以让我们重新索引,并使表格始终可用?
鉴于这样创建的表......
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)
如何确定它被分区在哪一列上?- 在本例中,仅通过查询 postgres 目录来获取“logdate”。
我查看了目录中明显的位置(pg_class、pg_index),但没有任何结果。
(使用10.5版本)
我有一个包含some_column数据类型列的表integer。
我注意到我的 PostgreSQL 10.6 实例足够智能,可以将以下两个查询解释为相同:
select * from my_table where some_column = 5; -- no quotes
select * from my_table where some_column = '5'; -- quotes added
Run Code Online (Sandbox Code Playgroud)
在列的where子句中添加引号有什么影响integer?
它会对一个包含 2000 万行的大表产生性能影响吗?
(有一个索引some_column。)
postgresql performance syntax postgresql-10 query-performance
这是在PostgreSQL中创建新表的方法,
CREATE TABLE foo (
foo_id int PRIMARY KEY,
bar text,
);
Run Code Online (Sandbox Code Playgroud)
如果需要检查该表是否已存在并CREATE仅在未找到时继续处理,我该如何执行此操作?