我写了两个函数来回答七周内七个数据库中第 3 天的第一个作业问题。
创建一个存储过程,您可以在其中输入您喜欢的电影名称或演员的名字,它会根据演员主演的电影或类似类型的电影返回前五名的建议。
我的第一次尝试是正确的,但速度很慢。返回结果最多可能需要 2000 毫秒。
CREATE OR REPLACE FUNCTION suggest_movies(IN query text, IN result_limit integer DEFAULT 5)
RETURNS TABLE(movie_id integer, title text) AS
$BODY$
WITH suggestions AS (
SELECT
actors.name AS entity_term,
movies.movie_id AS suggestion_id,
movies.title AS suggestion_title,
1 AS rank
FROM actors
INNER JOIN movies_actors ON (actors.actor_id = movies_actors.actor_id)
INNER JOIN movies ON (movies.movie_id = movies_actors.movie_id)
UNION ALL
SELECT
searches.title AS entity_term,
suggestions.movie_id AS suggestion_id,
suggestions.title AS suggestion_title,
RANK() OVER (PARTITION BY searches.movie_id ORDER BY …Run Code Online (Sandbox Code Playgroud) We have a Postgres RDS instance on Amazon Web Services. We have automatic backups enabled, and we take snapshots on a daily basis. We would like to generate a local 'up-to-date' backup of the RDS instance that we can manage ourselves. Running pg_dump against the instance is not sufficient because we want to be able to restore the database to any point in time. We would prefer to have a local backup of RDS and all WAL files since that …
我将拥有一个巨大的 PostgreSQL 9.3 数据库,其中包含许多表,每个表有超过 1 亿个条目。该数据库将基本上是只读的(一旦我填写了所有必要的表并构建了索引,不再对 DB 进行写操作)和单用户访问(从 localhost 运行和基准测试多个查询),因为将使用 DB仅用于研究目的。查询将始终在整数 DB 字段上使用 JOIN。
为此,我可能会购买 SSD (256-512GB)。我以前没有用过 SSD 做数据库,所以有什么我应该害怕的吗?我可以将整个数据库放在 SSD 上,还是只放在索引上?为 SSD 调整 PostgreSQL 是否需要任何特别的建议/教程?请注意,我有一个配备 i7 和 32Gb 内存的不错的工作站,所以也许您也可以提供一些建议。
例如,如果调用下面的脚本,PostgreSQL 会显示什么行为
BEGIN;
SELECT * FROM foo;
INSERT INTO foo(name) VALUES ('bar');
BEGIN; <- The point of interest
END;
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 会丢弃第二个BEGIN还是隐式决定提交,然后BEGIN END在最后将块作为单独的事务运行?
2020-08-04 更新:
由于显然仍在定期查看此答案,因此我想提供有关情况的最新信息。我们目前正在使用带有表分区的 PG 11,timestamp并且可以轻松处理表中的数十亿行。仅索引扫描可以挽救生命,没有它就不可能。
使用 PostgreSQL 9.2,我在相对较大的表(200 多万行)上进行慢速查询时遇到问题。我没有尝试任何疯狂的事情,只是增加了历史价值。下面是查询和查询计划输出。
我的表布局:
Table "public.energy_energyentry"
Column | Type | Modifiers
-----------+--------------------------+-----------------------------------------------------------------
id | integer | not null default nextval('energy_energyentry_id_seq'::regclass)
prop_id | integer | not null
timestamp | timestamp with time zone | not null
value | double precision | not null
Indexes:
"energy_energyentry_pkey" PRIMARY KEY, btree (id)
"energy_energyentry_prop_id" btree (prop_id)
"energy_energyentry_prop_id_timestamp_idx" btree (prop_id, "timestamp")
Foreign-key constraints:
"energy_energyentry_prop_id_fkey" FOREIGN KEY (prop_id) REFERENCES gateway_peripheralproperty(id) DEFERRABLE INITIALLY DEFERRED
Run Code Online (Sandbox Code Playgroud)
数据范围从2012-01-01至今,新数据不断增加。prop_id外键中大约有 2.2k 个不同的值,均匀分布。
我注意到行估计值相差不远,但成本估计值似乎大了 …
postgresql performance index optimization postgresql-performance
普通的旧流复制。PostgreSQL:9.2.7 Windows 8.1 64 位
我的主要和次要集群在同一台Windows 机器上。我已经完成了pg_start_backup()和所有事情,所以两个节点都有完全相同的数据。
现在复制的问题是从服务器的“复制连接”无法连接到主服务器,但我可以使用 psql shell 使用相同的参数进行连接。我认为罪魁祸首是 slave 的 recovery.conf 中的连接字符串:
primary_conninfo = 'host = 127.0.0.1 port = 5432 user = postgres password = postgres'
Run Code Online (Sandbox Code Playgroud)
我尝试了 localhost, 0.0.0.0, lan IP 除了 pg log 之外的所有内容:
FATAL: could not connect to the primary server: FATAL: no pg_hba.conf entry for replication connection from host "127.0.0.1", user "postgres", SSL off
Run Code Online (Sandbox Code Playgroud)
现在看看我的Master的pg_hba.conf:
host all all 0.0.0.0/0 trust
host all postgres 127.0.0.1/0 trust
# IPv6 local connections:
host …Run Code Online (Sandbox Code Playgroud) 之前用phpmyadmin管理过一个MySQL数据库,现在想管理一个PostgreSQL数据库。PostgreSQL 数据库在服务器上,而不是网络服务器上,所以我不使用 PHP。
有没有好的免费工具来管理 PostgreSQL 数据库?
我曾尝试使用 pgAdmin III,但与我以前使用过的 phpmyadmin 相比,它远非直观的应用程序。PostgreSQL DBA 通常使用什么?他们使用像 pgAdmin III 这样的图形工具还是主要是命令行工具?
所以我有一jsonb列有这样的条目:https : //pastebin.com/LxJ8rKk4
有没有办法对整个jsonb列实现全文搜索?
在级联上截断表时,有什么方法可以重置所有表序列。
我已经阅读了这篇文章如何在 postgres 中重置序列并用新数据填充 id 列?
ALTER SEQUENCE seq RESTART WITH 1;
UPDATE t SET idcolumn=nextval('seq');
Run Code Online (Sandbox Code Playgroud)
它仅适用于一个序列,但我的问题是重新启动截断表的所有序列。
考虑当我使用TRUNCATE sch.mytable CASCADE;它影响3个相关表,这意味着三个序列,是否有任何解决方案可以一次性重新启动此序列。
postgresql ×10
optimization ×2
amazon-ec2 ×1
dbeaver ×1
index ×1
json ×1
management ×1
performance ×1
replication ×1
sequence ×1
tools ×1
transaction ×1
truncate ×1