Made design doc names bold for better readability.
Migrated to https://docs.couchdb.org/en/stable/best-practices/index.html , see https://github.com/apache/couchdb-documentation/pull/370
|Deletions are marked like this.||Additions are marked like this.|
|Line 1:||Line 1:|
When needing to upload changes to an existing design document, to avoid having everything hang for potentially hours while generating the views - follow the descriptions below:
== Background information: ==
CouchDB view index filenames are based on the contents of the design document (not its name, ID or revision). This means that two design documents with identical view code will share view index files.
== Approach: ==
http://localhost:5984/database/_design/ddoc needs to be updated
So the simple approach is:
1. Upload the old design doc to '''_design/ddoc-old''' (or copy '''_design/ddoc''' to '''_design/ddoc-old''') if you want an easy way to rollback in case of problems. This will cause the view indexes for '''_design/ddoc''' to be shared with '''_design/ddoc-old'''.
2. Upload the updated design doc to '''_design/ddoc-new'''.
3. Query a view in '''_design/ddoc-new''' to trigger view index generation. You can track the indexing progress via Futon at http://localhost:5984/_utils/status.html or by requesting http://localhost:5984/_active_tasks directly.
4. Reupload the updated design doc to '''_design/ddoc''' (or copy '''_design/ddoc-new''' to '''_design/ddoc''') when view index generation is complete. This will cause the indexes built for '''_design/ddoc-new''' to be shared with '''_design/ddoc'''. The updated design doc is now live with view indexes ready to go!
5. Delete '''_design/ddoc-new''' and/or '''_design/ddoc-old''' at your discretion. Don't forget to also run a clean-up to reclaim the disk space used by their view indexes: http://wiki.apache.org/couchdb/HTTP_view_API#View_Cleanup
To copy a document use:
curl -X COPY <URL of source design document> -H "Destination: <ID of destination design document>"
When copying a document to an already existing destination, you'll also need to supply the revision of the document you want to overwrite:
curl -X COPY <URL of source design document> -H "Destination: <ID of destination design document>?rev=<revision>"
Example: copy http://localhost:5984/database/_design/ddoc to http://localhost:5984/database/_design/ddoc-old:
curl -X COPY http://localhost:5984/database/_design/ddoc -H "Destination: _design/ddoc-old"
'''Note: This approach will work for normal couch views, couchdb-lucene views (fulltext), and should also work for bigcouch clusters - to my understanding'''