H.4. Extensions

|    H.4. Extensions     |                            |                             |                  |                        |
|:----------------------:|----------------------------|-----------------------------|------------------|------------------------|
|[Prev](external-pl.html)|[Up](external-projects.html)|Appendix H. External Projects|[Home](index.html)| [Next](sourcerepo.html)|

---

## H.4. Extensions

[]()

PostgreSQL is designed to be easily extensible. For this reason, extensions loaded into the database can function just like features that are built in. The `contrib/` directory shipped with the source code contains several extensions, which are described in [Appendix F](contrib.html). Other extensions are developed independently, like [PostGIS](https://postgis.net/). Even PostgreSQL replication solutions can be developed externally. For example, [Slony-I](https://www.slony.info) is a popular primary/standby replication solution that is developed independently from the core project.

---

|[Prev](external-pl.html) |[Up](external-projects.html)|        [Next](sourcerepo.html)        |
|:------------------------|:--------------------------:|--------------------------------------:|
|H.3. Procedural Languages|     [Home](index.html)     | Appendix I. The Source Code Repository|

 // \<![CDATA[ \<-- For SVG support if ('WebSocket' in window) { (function() { function refreshCSS() { var sheets = [].slice.call(document.getElementsByTagName("link")); var head = document.getElementsByTagName("head")[0]; for (var i = 0; i \< sheets.length; ++i) { var elem = sheets[i]; head.removeChild(elem); var rel = elem.rel; if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") { var url = elem.href.replace(/(&|\\?)\_cacheOverride=\\d+/, ''); elem.href = url + (url.indexOf('?') \>= 0 ? '&' : '?') + '\_cacheOverride=' + (new Date().valueOf()); } head.appendChild(elem); } } var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'; var address = protocol + window.location.host + window.location.pathname + '/ws'; var socket = new WebSocket(address); socket.onmessage = function(msg) { if (msg.data == 'reload') window.location.reload(); else if (msg.data == 'refreshcss') refreshCSS(); }; console.log('Live reload enabled.'); })(); } // ]]\>