Dear wiki user,

You have subscribed to a wiki page "Couchdb Wiki" for change notification.

The page "Purge_Documents" has been deleted by JoanTouzet:

https://wiki.apache.org/couchdb/Purge_Documents?action=diff&rev1=5&rev2=6

Comment:
Migrated to official docs

- The '''_purge''' operation removes all references to the deleted revisions -- 
and their parents -- from the database. (This is very different from a normal 
delete, which actually ''adds'' a "tombstone" revision.) In a sense it edits 
history, similarly to a Git "reset": the revisions will no longer appear in the 
revision tree. It's as though the database had never heard of them at all.
  
- == Reasons To (And Not To) Purge ==
- 
- So, you've included your credit card details, your mother's maiden name and 
the PIN's to all your major credit cards in a CouchDB document by mistake. 
You'd like to undo this. Usually, you can simply update the document, removing 
the confidential data, and then compact the database. However, let's say you 
really messed up and included this secret information in the document's id 
field. You remember that CouchDB will remember all the latest {id, rev} pairs 
it's ever seen (so that replication can make all replicas eventually 
consistent). Are you paddling down an unpleasant stream with no means of 
steering? Fortunately not! You can purge.
- 
- If you are using _purge to recover space, you are almost certainly using 
CouchDB inappropriately. The most common reason developers use _purge 
inappropriately is when managing short-lived data (log entries, message queues, 
etc). A better remedy is to periodically switch to a new database and delete 
the old one (once the entries in it have all expired).
- 
- == Eligibility For Purging ==
- 
- A revision parameter to _purge must be a ''leaf'' in the revision tree. This 
means it must be the current revision, or one of the current conflicting 
revisions. This is because a revision that has already been replaced by another 
is not a leaf node of the revision tree, so removing it would break the 
integrity of the tree.
- 
- When a revision is purged, its ancestors are purged if possible. Ancestors 
will be kept if necessary to preserve the integrity of the tree; this only 
happens if there have been conflicts and they are either unresolved or haven't 
yet been compacted away.
- 
- == The _purge Command ==
- 
- To perform a purge operation you must send a JSON object, where the keys are 
the IDs to purge and each value is a list of the revisions to purge. Typically 
you'd just specify the current revision ID, which will purge the entire 
document unless there are conflicts. To purge an entire document while it's in 
conflict, you need to send each conflicting revision ID.
- 
- For example:
- {{{
- POST /mydb/_purge
- Content-Type: application/json
- 
- {
-   "c7a59f0d08d28928a62124fa16000ea7" : [
-     "2-02be3a9b23b4402160ad678e208afb8e"
-     ]
- }
- }}}
- 
- The response will contain the purge sequence number, and a list of the 
document IDs and revisions successfully purged.
- 
- {{{
- {
-    "purged" : {
-       "c7a59f0d08d28928a62124fa16000ea7" : [
-          "2-02be3a9b23b4402160ad678e208afb8e"
-       ]
-    },
-    "purge_seq" : 1
- }
- }}}
- 
- The '''purge sequence number''' is simply a persistent per-database counter 
that is incremented every time a _purge operation is performed. It's used 
internally to invalidate view indexes.
- 
- == Side Effects ==
- 
- If you have purged more than one document between querying your views, you 
will find that they will rebuild from scratch. This is because you have removed 
the information necessary to perform a correct incremental update.
- 
- If the purged revisions still exist in a another replica of the database, a 
replication with that database will pull them over again and restore them. To 
globally remove the revisions, the purge needs to be performed on all the 
replicas as well, ensuring that replication is stopped during this operation, 
to avoid them being replicated back again.
- 

Reply via email to