我有一个视图,它是两个选择的 UNION 的结果。它有类似这样的内容:
id foreignkey
1 a
2 a
3 b
4 c
Run Code Online (Sandbox Code Playgroud)
我希望在视图的定义中添加一列,该列将显示值的计数,但不会聚合它们。像这样的事情:
id foreignkey count
1 a 2
2 a 2
3 b 1
4 c 1
Run Code Online (Sandbox Code Playgroud)
我现有的查询基本上是:
create or replace view x as
select * from a
union
select * from b
Run Code Online (Sandbox Code Playgroud)
我想要计算联合的结果,但我不知道该怎么做。
编辑 - 取得了一些进展,使用普通的表格我可以做到这一点:
SELECT *,
(select count(id) from mytable where t.data = data)
FROM mytable as t
Run Code Online (Sandbox Code Playgroud)
这个问题之所以出现,是因为该表实际上是两个表的并集。不知道如何在不进行两次联合的情况下做到这一点?
我的数据库中有一个表,我使用以下标准存储日期:YYYY-MM-DD。正如你所看到的,我没有节省时间。第一次将同一个表导出到 csv 文件时,我按顺序获得了以下记录:
AAA@outlook.com
BBB@gmail.com
CCC@gmail.com
DDD@hotmail.com
Run Code Online (Sandbox Code Playgroud)
但是,当我运行相同的查询将数据导出到相同的 CSV 时,我按以下顺序收到了记录:
AAA@outlook.com
111@hotmail.com
222@gmail.com
333@gmail.com
Run Code Online (Sandbox Code Playgroud)
因此,我得出的结论是对数据进行排序,因为这可能是不确定的。不是吗?这是我从数据库导出数据的查询:
SELECT id AS "_id", cpf, email, name, agency, account, "createdDate" FROM "NextUsers", "Users" WHERE "userId"="Users".id ORDER BY "createdDate" OFFSET $1 LIMIT 500;
Run Code Online (Sandbox Code Playgroud)
其中 $1 从 0 开始,每次迭代都会增加 500。OBS:两个查询返回的数据均已正确排序,但顺序与您所看到的不同。
我在一台服务器上有数据库和表 collection_city 。它有 21 行。我在第二台服务器上有数据库和表 collection_city 。它也有 21 行。
他们都有这一行:
tinker=# table collection_city;
id | name | alias | postal_code | region_id
----+---------------+--------------+-------------+-----------
2 | Obrenovac | obrenovac | | 1
Run Code Online (Sandbox Code Playgroud)
id 列是主键。
我在第一台服务器上创建了发布:
CREATE PUBLICATION tinkerpub FOR ALL TABLES;
tinker=# \dRp[+]
Publication tinkerpub
Owner | All tables | Inserts | Updates | Deletes | Truncates
----------+------------+---------+---------+---------+-----------
postgres | t | t | t | t | t
(1 row)
Run Code Online (Sandbox Code Playgroud)
我在第二台服务器上创建了订阅:
CREATE SUBSCRIPTION tinkersub CONNECTION 'dbname=tinker host=192.168.150.5 user=postgres password=test port=5432' …Run Code Online (Sandbox Code Playgroud) postgresql replication master-slave-replication postgresql-11
我正在寻找如何根据 PostgreSQL (10) 中子查询的结果从一个表中选择多行。我对高级数据库概念不是很熟悉,所以我可能会在这里遗漏一些明显的东西(即我的词汇量可能不够)。我不知道该怎么做PARTITION BY,但也许这是可能的。
数据库小提琴:https://www.db-fiddle.com/f/w7EwvYujxg4wmL7wHkfBdD/0
CREATE TABLE devices(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE);
CREATE TABLE results(id INTEGER PRIMARY KEY, test_name VARCHAR, results JSON, state VARCHAR);
CREATE TABLE results_for_device(results_id INTEGER, device_id INTEGER, PRIMARY KEY(results_id, device_id));
INSERT INTO devices(id, name) VALUES
(1, 'Dev1'),
(2, 'Dev2');
INSERT INTO results(id, test_name, results, state) VALUES
# Results thread for 'test1' and 'Dev1'
(1, 'test1', '{}', 'CURRENT_BLUEPRINT'), # Select all the below results in this section
(2, 'test1', '{}', 'MATCHING_BLUEPRINT'),
(3, …Run Code Online (Sandbox Code Playgroud) 我正在遵循此页面中如何在 postgresql 中使用“创建统计信息”的示例。
CREATE TABLE tbl (
col1 int,
col2 int
);
INSERT INTO tbl SELECT i/10000, i/100000
FROM generate_series (1,10000000) s(i);
CREATE STATISTICS s1 (dependencies) on col1, col2 from tbl;
ANALYZE tbl;
SELECT stxname, stxkeys, stxdependencies
FROM pg_statistic_ext
WHERE stxname = 's1';
Run Code Online (Sandbox Code Playgroud)
返回:
stxname,stxkeys,stxdependencies
s1,1 2,{"1 => 2": 1.000000}
Run Code Online (Sandbox Code Playgroud)
然而,我对这条线感到困惑
观察这个,我们可以看到 Postgres 意识到 col1 完全决定 col2,因此有一个系数 1 来捕获该信息。
在示例中,col2 中有许多重复的记录。那么 col1 如何“完全确定”col2 呢?这是什么意思?
我有这个生成随机字符串的语句:
SELECT string_agg (substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '')
FROM generate_series(1, 20);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在函数内实现此功能,该函数会将上述语句的值自动分配给url_prefix创建新记录时命名的字段(on INSERT's)?
我一直在学习Postgres(来自SQL Server),这个错误真的让我很困惑。
\n\n这是带有一些示例数据的代码:
\n\ncreate table T (\nID serial primary key,\nA varchar(1),\nB varchar(1),\nC varchar(1)\n)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 测试表。
\n\ninsert into T (A, B, C)\nvalues('A', 'B', 'C'), ('A', 'B', 'C')\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 插入重复项
\n\ndelete from T\nwhere ID in (\n select t.ID\n from ( select ID, row_number() over (partition by A,B,C order by A,B,C) as rn\n from T) as t\n where t.rn < (select max(t.rn) from t)\n )\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 删除重复项并保留最后一个条目。
\n\n问题在于(select max(t.rn) from t)我假设这是一个菜鸟错误,与在引用带有别名的列时不知道 postgres 语法有关? …
我有一个程序:
create or replace procedure pro_update_last_read(in input_sensor_id integer, in read_time timestamp)
as
$$
begin
update sensor
set last_read = read_time
where sensor_id = input_sensor_id;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
以及一个调用它的触发器:
create trigger tri_last_read
after insert or update of report_time
on report
execute procedure pro_update_last_read(sensor_id, report_time);
Run Code Online (Sandbox Code Playgroud)
但是,在创建触发器时,我收到错误消息:
Run Code Online (Sandbox Code Playgroud)[42883] ERROR: function pro_update_last_read() does not exist
为什么会发生这个错误?
是否有任何可用于 Postgresql 的类似于 SQL Server 查询存储的扩展。这样它可以帮助识别性能瓶颈。
SQL Server 查询存储提供有关查询执行次数、每个查询的资源消耗的信息。https://learn.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15提供了有关查询存储的更多详细信息。
与Stack Overflow 上发布的原始问题相关。
有兴趣使用 C# 应用程序(适用于 Windows)分发 PostgreSQL 的副本。但是,尝试了解应如何处理以下情况:
根据我的理解,应该可以安装 PostgreSQL 的第二个实例以在同一计算机系统上同时运行(作为不同的服务,绑定到不同的 TCP 端口#?)。然而,关于如何完成此操作的最接近的答案可以在这里找到,但它并没有真正提供很多细节。
到目前为止,在我的测试环境 (VM) 中,我有一个 Ver.1 实例。12 PostgreSQL安装在默认目录中C:\Program Files\PostgreSQL\12。
我是否正确地理解我应该复制目录的所有内容C:\Program Files\PostgreSQL\12并复制/粘贴到不同的目录(例如C:\Program Files\PostgreSQL\Test12?
然后,运行pg_ctl register,但是有什么选项呢?
然后,我应该跑吗pg_ctl start?
在完成这一切之前,是否需要考虑任何事项?
postgresql ×10
functions ×2
duplication ×1
insert ×1
installation ×1
monitoring ×1
order-by ×1
performance ×1
plpgsql ×1
random ×1
replication ×1
subquery ×1
trigger ×1