小编Ada*_*tan的帖子

PostgreSQL:损坏的主键,不一致的表

在从云故障中恢复时,我发现PostgreSQL数据库中的某些表行为异常。这些表使用主键编制索引,但pg_dump产生重复字段,pg_restore在备份服务器上失败。

我试图REINDEX

REINDEX INDEX rank_details_pkey;
ERROR:  could not create unique index "rank_details_pkey"
DETAIL:  Table contains duplicated values.
Run Code Online (Sandbox Code Playgroud)

指数定义为:

<table info here>
Indexes:
    "rank_details_pkey" PRIMARY KEY, btree (user_id)
Run Code Online (Sandbox Code Playgroud)

而且,奇怪的是,

SELECT user_id, COUNT(*) FROM <table name> GROUP BY 1 HAVING COUNT(*) > 1;
 user_id | count 
---------+-------
(0 rows)
Run Code Online (Sandbox Code Playgroud)

总而言之 - 我的表中有重复的值,无法找到或清除

任何想法如何解决这一问题?这是一个生产服务器,所以所有修复都应该在不影响服务的情况下完成。

postgresql primary-key

6
推荐指数
1
解决办法
3669
查看次数

BTREE 在 MySQL 中的好处

BTREE在查询速度、磁盘存储和内存使用方面,在 MySQL中使用索引的优缺点是什么?

  • 是否BTREE按递增顺序提供更简单的迭代?
  • 什么样的查询会从 a 中受益BTREE
  • 使用BTREEindex有什么缺点吗?
  • 它会增加空间或索引时间吗?

mysql index btree

6
推荐指数
2
解决办法
2万
查看次数

在 MySQL 中显示过程代码

我试图显示一个名为的存储过程的 SQL 代码add_pixel

mysql> SHOW PROCEDURE CODE add_pixel;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Run Code Online (Sandbox Code Playgroud)

我已确保该程序存在:

mysql> CALL add_pixel();
ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE pixels.add_pixel; expected 3, got 0
Run Code Online (Sandbox Code Playgroud)

SHOW CREATE PROCEDURE作品:

mysql> SHOW CREATE PROCEDURE add_pixel;
+-----------+----------+------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode | Create Procedure | character_set_client …
Run Code Online (Sandbox Code Playgroud)

mysql stored-procedures source-code

6
推荐指数
1
解决办法
3万
查看次数

PostgreSQL 关系大小不总结

我有一个非常大的表,带有 blob 字段,称为data. 我试图弄清楚为什么它没有被很好地缓存并且重复的SELECTs 很慢:

=> SELECT pg_size_pretty(pg_total_relation_size('data'));
157 GB
Run Code Online (Sandbox Code Playgroud)

这看起来有点大,所以我试着总结一下数据:

=> SELECT pg_size_pretty(pg_relation_size('data'));
19 GB
Run Code Online (Sandbox Code Playgroud)

随着指数:

SELECT pg_size_pretty(pg_relation_size('data_pkey'));
757 MB   
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB   
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB
SELECT pg_size_pretty(pg_relation_size('data_merged_idx'));
854 MB
SELECT pg_size_pretty(pg_relation_size('data_owner_idx'));
794 MB
SELECT pg_size_pretty(pg_relation_size('data_session_format_idx'));
779 MB
Run Code Online (Sandbox Code Playgroud)

数据和索引大小的总和约为 26 GB,但总关系大小接近 160 GB。该表刚刚从转储中恢复,此后没有进行任何写入。

  • 这种差异的解释是什么?
  • 有什么办法可以减少浪费的磁盘空间?聚类会有帮助吗?

postgresql database-size size

5
推荐指数
1
解决办法
1664
查看次数

PostgreSQL:显示继承关系?

我想知道某个 PostgreSQL 表是否是任何继承关系的一部分(即是其他表的父表还是子表)。

有查询吗?继承数据存储在哪里?

postgresql

5
推荐指数
1
解决办法
301
查看次数

在 MySQL 中实现循环缓冲区(滑动窗口)

我打算在 MySQL 数据库中存储一些 Java 对象,并附上时间戳。这些对象应该以滑动窗口的方式保存(也称为循环缓冲区),这意味着N应该只保留特定类型的最后一个项目。

我的一般想法是一个INSERT触发器:

DELETE FROM pixels WHERE type="type_of_new_pixel"
                         AND id NOT IN 
                         (SELECT id FROM pixels 
                          WHERE type="type_of_new_pixel"
                          ORDER BY timestamp DESC LIMIT N);
Run Code Online (Sandbox Code Playgroud)
  • 触发器是正确的方法吗?如何将触发器添加到表中?
  • 为了提高性能,我想每隔 M INSERTs激活一次触发器。我的清单中会有一些额外的项目,但没关系。我该如何实施?会id % 100 == 0检查吗?

mysql trigger

5
推荐指数
1
解决办法
3138
查看次数

MySQL:删除除最后 N 条记录以外的所有记录

考虑下表:

mysql> DESCRIBE pixels;
+---------------+-------------+------+-----+-------------------+----------------+
| Field         | Type        | Null | Key | Default           | Extra          |
+---------------+-------------+------+-----+-------------------+----------------+
| id            | bigint(20)  | NO   | PRI | NULL              | auto_increment |
| pixel_id      | varchar(32) | NO   | MUL | NULL              |                |
| creation_time | timestamp   | NO   | MUL | CURRENT_TIMESTAMP |                |
| pixel         | mediumblob  | NO   |     | NULL              |                |
+---------------+-------------+------+-----+-------------------+----------------+
4 rows in set (0.04 sec)
Run Code Online (Sandbox Code Playgroud)

用一些数据:

mysql> SELECT * FROM pixels; …
Run Code Online (Sandbox Code Playgroud)

mysql delete subquery

5
推荐指数
1
解决办法
2万
查看次数

MySQL“语句可能不安全以语句格式登录”警告

以下 MySQL 警告的含义是什么:

Statement may not be safe to log in statement format.
Run Code Online (Sandbox Code Playgroud)

我的mysqld.err档案中每天都有数以万计的此类陈述,我不知道应该从哪里开始调查。

mysql replication log warning

5
推荐指数
1
解决办法
8276
查看次数

无法在 RDS 上的 PosrgreSQL 9.3 上运行digest()

按照另一个答案给出的建议,我尝试digest()在 AWS RDS 上的 PostgreSQL 9.3 上使用该函数:

devdb=> SELECT digest('blah', 'sha1');
ERROR:  function digest(unknown, unknown) does not exist
LINE 1: SELECT digest('blah', 'sha1');
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

即使存在 pgcrypto:

devdb=> SHOW rds.extensions;
Run Code Online (Sandbox Code Playgroud)

btree_gin,btree_gist,chkpass,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_trgm,plperl,plpgsql,pltcl,posttiger,postggis_ tablefunc,tsearch2,unaccent,uuid-ossp

如何启用该digest()功能?

更新

在AWS RDS论坛上共同提问,会发帖互相更新。

digest() 数据库上似乎不存在:

devdb=> \df digest
                       List of functions
 Schema | Name | Result data type | Argument …
Run Code Online (Sandbox Code Playgroud)

postgresql-9.3 hashing

5
推荐指数
1
解决办法
2万
查看次数

PostgreSQL:对 pg_stat_activity 中的所有查询运行 EXPLAIN

我正在调查 RDS 上 PostgreSQL 数据库的高负载。作为调查的一部分,我正在运行以下查询:

SELECT now()-query_start, state, query FROM pg_stat_activity ORDER BY 1 DESC;
Run Code Online (Sandbox Code Playgroud)

此查询返回数据库上运行时间最长的查询。然后,我手动将查询文本复制到另一个窗口,并运行EXPLAIN每个查询以识别需要索引的较长查询。

有没有办法自动运行EXPLAIN每个查询pg_stat_activity

postgresql pg-stat-activity amazon-rds

5
推荐指数
1
解决办法
1236
查看次数