Thanks for the help, guys.
I was able to do the following:
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew2"
DETAIL: Key (post_id)=(116038) is duplicated.
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 2
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 0
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew3"
DETAIL: Key (post_id)=(9336) is duplicated.
discourse=# delete from post_search_data
where post_id = 9336;
DELETE 1
.
.
.
.
discourse=# reindex index concurrently "posts_search_pkey";
REINDEX
Once everything seemed ok, I did a full backup and restored it on a new server with no issues.
I appreciate everyone’s time. I love discourse!
Lesson learned: check backups once in a while to be sure they’re good
I keep daily backups, and then keep monthly “snapshots” too. The earliest backup I had that didn’t have a corrupted database was 4 months old ![]()