我有一个表my_tables,它在几个表中被引用为外键。
我想选择my_table其他表中未引用的所有行。
AFAIK,应该可以以通用方式(带有一些内省魔法)来做到这一点。
我有一张表格,MyData格式如下:
|id|theme_id|priority_id|value|
Run Code Online (Sandbox Code Playgroud)
我正在尝试为所有行获得以下结果:
theme_id | priority_id | total | sum
------------------------------------
1 | 1 | 3 | 5
1 | 2 | 5 | 12
1 | 3 | 1 | 3
2 | 1 | 2 | 6
Run Code Online (Sandbox Code Playgroud)
我们的想法是组中的所有行通过theme_id和priority_id再总结的数值为分组,以及,以获取进入那笔总行。
当我尝试以下操作时,我得到一个与 sum 列相等的 total 列:
|id|theme_id|priority_id|value|
Run Code Online (Sandbox Code Playgroud)
我也试过:
SELECT theme_id, priority_id, sum(value) AS values, count(id) as total
FROM MyData
GROUP BY theme_id, priority_id
Run Code Online (Sandbox Code Playgroud)
以上两个都给了我相同的输出:
theme_id | priority_id | total | sum
------------------------------------
1 | 1 …Run Code Online (Sandbox Code Playgroud) 继我之前的问题之后:
在 PostgreSQL 9.0 中创建 crosstab() 数据透视表
我设法创建了一个数据透视表来ageband使用该crosstab()函数。我可以使用它来创建基本无几何表的视图或表。
但是,这仍然没有多大用处,因为我需要将其链接到gazetteers_and_addresses.unit_postcode表格以分配几何图形以进行进一步分析。
我将附上两个表的表结构和用于创建交叉表的原始代码。
CREATE OR REPLACE VIEW adult_social_care.vw_ageband AS (
SELECT * FROM crosstab(
'SELECT postcode_nospace_, ageband, count(ageband) as total_count
FROM adult_social_care.activities_in_localities_asc
GROUP BY postcode_nospace_, ageband
ORDER BY postcode_nospace_'
,$$VALUES ('18-24'::text), ('25-34'), ('35-44'), ('45-54'), ('55-64'), ('65-74'), ('75-84'), ('85-94'), ('95 AND OVER')$$)
AS ct("postcode" text, "18-24" numeric, "25-34" numeric,"35-44" numeric, "45-54" numeric, "55-64" numeric, "65-74" numeric, "75-84" numeric, "85-94" numeric, "95 AND OVER" numeric));
Run Code Online (Sandbox Code Playgroud)
表定义:
activities_in_localities_asc:
CREATE …Run Code Online (Sandbox Code Playgroud) 我有一个/tmp/foo.csv看起来像这样的文件:
1,2
10,20
100,200
Run Code Online (Sandbox Code Playgroud)
我在另一个目录中有相同的文件/mydata/foo.csv。目录和文件都具有完全相同的权限、所有者,并且是由同一个用户创建的,但是当我运行时
COPY foo FROM '/tmp/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
ERROR: could not open file "/tmp/foo.csv" for reading: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当我跑
COPY foo FROM '/mydata/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);
Run Code Online (Sandbox Code Playgroud)
我明白了COPY 3。
我在这里缺少什么?
以下是相关文件和目录信息:
??foo@bar / ‹py27›
??$ ll -d /mydata /mydata/foo.csv /tmp /tmp/foo.csv 1 ?
drwxrwxrwt 2 root root 4.0K Sep 9 08:26 /mydata
drwxrwxrwt 17 root root 420 …Run Code Online (Sandbox Code Playgroud) 我有一个模式(称为import),其中数据作为表导入,以及一个处理它们的函数。之后我想将这些表移到另一个模式中(称为data_archive)中。现有功能运行良好,但我找不到更改架构的方法;这是我编写的一个函数:
我的想法是根据selecta 为该管理制作的表格提供的标准创建表格列表,然后遍历此列表并执行以下操作Alter table xxxx SET schema data_archive:
CREATE OR REPLACE FUNCTION archive_datasets()
RETURNS VOID AS
$BODY$
DECLARE
table_rec record;
BEGIN
FOR table_rec IN
SELECT t.table_name
FROM information_schema.tables AS t
WHERE table_schema = 'import'
AND quote_ident(t.table_name) IN (
SELECT "table_name"
FROM data_sets
WHERE status IN ('Processed', 'Archived', 'Deleted')
)
LOOP
ALTER TABLE quote_ident(table_rec.table_name) SET schema data_archived;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "(" LINE 28: …
我正在使用 Postgres 9.1 我要加入两个表:
wikidb=> \d page
Table "public.page"
Column | Type | Modifiers
-----------------------+---------------+------------------------------
page_id | bigint | not null
page_namespace | integer | not null default 0
page_title | text | not null default ''::text
[...]
Indexes:
[...]
"page_page_namespace_page_title_idx" UNIQUE, btree (page_namespace, page_title)
wikidb=> \d pagelinks
Table "public.pagelinks"
Column | Type | Modifiers
-------------------+---------+----------------------------
pl_from | bigint | not null default 0::bigint
pl_namespace | integer | not null default 0
pl_title | text | not null default ''::text …Run Code Online (Sandbox Code Playgroud) postgresql performance optimization execution-plan postgresql-9.1 query-performance
是否可以reltuples使用附加条件查询给定表的列table.name LIKE 'hello%'?
目前在我更大的表上,SELECT count(*)查询需要很长时间,我不需要确切的计数。所以我想知道是否可以WHERE在 the 中添加子句reltuples?
我使用此查询来查找父母的评论id:
WITH RECURSIVE cte (id, content, path, parent_id, depth) AS (
SELECT id,
content,
array[id] AS path,
parent_id,
1 AS depth
FROM comment
WHERE id = 1
UNION ALL
SELECT comment.id,
comment.content,
cte.path || comment.id,
comment.parent_id,
cte.depth + 1 AS depth
FROM comment
JOIN cte ON comment.parent_id = cte.id
WHERE depth < 3
)
SELECT id, content, path, parent_id, depth FROM cte
ORDER BY path LIMIT 200;
Run Code Online (Sandbox Code Playgroud)
除了我将深度限制为 3 之外,它运行良好。我怎样才能知道当前行是否有更多的孩子,如果有,请获取它们的数量,以便我可以显示数字,例如。“多加载 X”。
解决这个问题的最佳方法是什么?
在这个小提琴中,id4 和 …
我需要对 INSERT 和 UPDATE 操作实施唯一检查,但我更愿意避免在我的表上创建大量唯一索引(现在约为 12Gb)。现在我有唯一的部分索引并且它工作得很好,除了一件事 - 它需要大量的 SSD 空间。我不需要使用这个索引的 SELECT 操作,我只需要检查数据的唯一性。
我阅读了这个和这个讨论,我明白唯一约束和唯一索引之间没有真正的区别,除了部分条件,它只能用于索引。
有没有办法做到这一点?
更新:
我的例子是带有历史选项的多对多关系表的模式。此选项由 2 个附加字段time_from和time_to. 他们正在存储进入和离开关系的时间。为了数据一致性,我创建了 4 个额外的部分唯一索引(见下文)。
现在该表包含 1 162 010 000 行。以及每个索引的表的整体空间:
vkontakte_wall_post_likes_users - 57 GB
vkontakte_wall_post_like_users_post_id - 24 GB
vkontakte_wall_post_like_users_time_to_2col_uniq - 24 GB
vkontakte_wall_post_like_users_pkey - 24 GB
vkontakte_wall_post_like_users_user_id - 24 GB
vkontakte_wall_post_like_users_time_to_3col_uniq - 846 MB
vkontakte_wall_post_like_users_time_from_2col_uniq - 8192 bytes
vkontakte_wall_post_like_users_id_seq - 8192 bytes
Run Code Online (Sandbox Code Playgroud)
架构:
CREATE TABLE vkontakte_wall_post_likes_users
(
id integer NOT NULL DEFAULT nextval('vkontakte_wall_post_like_users_id_seq'::regclass),
post_id integer …Run Code Online (Sandbox Code Playgroud) 我对 postgresql-9.4 数据库进行了完全真空,并且我有很多具有不可移动行版本的表。我想知道这些是什么或者我可以在哪里阅读它们。
INFO: vacuuming "public.profile_generals"
INFO: "profile_generals": found 0 removable, 654 nonremovable row versions in 51 pages
DETAIL: 0 dead row versions cannot be removed yet.
Run Code Online (Sandbox Code Playgroud) postgresql ×10
cte ×2
aggregate ×1
alter-table ×1
count ×1
datatypes ×1
dynamic-sql ×1
foreign-key ×1
functions ×1
index ×1
index-tuning ×1
linux ×1
many-to-many ×1
metadata ×1
optimization ×1
performance ×1
pivot ×1
plpgsql ×1
recursive ×1
vacuum ×1