<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dfetter</id>
	<title>PostgreSQL wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dfetter"/>
	<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/wiki/Special:Contributions/Dfetter"/>
	<updated>2026-06-09T11:56:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Parallel_Recovery&amp;diff=36933</id>
		<title>Parallel Recovery</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Parallel_Recovery&amp;diff=36933"/>
		<updated>2022-05-09T07:29:59Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Touched up a few spelling issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MyPicture_github.jpg]]&lt;br /&gt;
&lt;br /&gt;
My Wiki home: [[Koichi]]&lt;br /&gt;
&lt;br /&gt;
email: koichi.dbms_at_gmail.com&lt;br /&gt;
&lt;br /&gt;
Other topics: [[Distributed deadlock detection]]&lt;br /&gt;
== &#039;&#039;&#039;Parallel Recovery&#039;&#039;&#039; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL redo log (WAL) outline ===&lt;br /&gt;
&lt;br /&gt;
In PostgreSQL, WAL (write-ahead log) is used for recovery and log-shipping replication.  Outline is described in [https://www.postgresql.org/docs/current/wal-intro.html this documentation page].   The outline of WAL is:&lt;br /&gt;
&lt;br /&gt;
* Every updating backend process must write its redo log to WAL before it really updates data files.&lt;br /&gt;
* Each WAL record (piece of updating data record) has to reach stable storage before the data is synch&#039;ed to the storage.&lt;br /&gt;
&lt;br /&gt;
WAL is used in recovery and log-shipping replication.   In recovery, the WAL is used as follows:&lt;br /&gt;
&lt;br /&gt;
* Each WAL record is read from WAL segments in the written order,&lt;br /&gt;
* Read WAL record is applied to corresponding data block.   This is called &amp;quot;redo&amp;quot; or &amp;quot;replay&amp;quot;.&lt;br /&gt;
* To maintain redo consistency, redo was done in single thread.&lt;br /&gt;
&lt;br /&gt;
In the case of log-shipping replication, each WAL record is:&lt;br /&gt;
&lt;br /&gt;
* Transferred to each replica in the written order and&lt;br /&gt;
* Replayed at replica in a single thread just as in recovery&lt;br /&gt;
* When replay reaches a consistent state, it allows postmaster to begin read transactions, while following WAL records reach and are replayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Issues around serialized replay ===&lt;br /&gt;
&lt;br /&gt;
At present, WAL records are replayed strictly in written order in a single thread, while they are generated by multiple backend processes in parallel.   The issues are:&lt;br /&gt;
&lt;br /&gt;
* Recovery/replay performance is much worse than performance to write WALs.   Recovery can take longer than the period WAL records were written.&lt;br /&gt;
* Replication lag can be long when the master has heavy updating workloads.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Can replay be done in parallel ? ===&lt;br /&gt;
&lt;br /&gt;
If we apply several rules about recovery order, yes.   The rules are:&lt;br /&gt;
&lt;br /&gt;
* For a given data block, WAL records must be applied in the written order.&lt;br /&gt;
* For a given transaction, when we apply WAL record terminating the transaction (commit/abort/prepare for commit), all the associated WAL records must have been replayed,&lt;br /&gt;
* In the case of multi-block WAL, it should be applied only by one worker.   For this purpose, such WAL record is assigned to all the block workers responsible for each block involved.   When block worker picks up multi-block WAL and if it is not the last thread, it should wait until the last thread picking up this record actually replay it.   If a thread is the last to pick up multi-block WAL record, it replays the record and send sync to other waiging workers.&lt;br /&gt;
* To replay specific WAL record such as updating timeline, it should wait until all the preceding WAL records are replayed This may not be necessary but it looks safer at present to have such condition for certain set of WAL records.&lt;br /&gt;
* Replayed LSN at pg_controldata will be updated when all the preceding WAL records are replayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Implementation Note ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Worker configuration ====&lt;br /&gt;
&lt;br /&gt;
* Because current recovery is done in startup process, parallel replay threads are implemented as its child process.&lt;br /&gt;
* Now we have following processes for this purpose:&lt;br /&gt;
** Startup process: read WAL record from WAL segment/walsender and perform overall control,&lt;br /&gt;
** Dispatching worker: analyze and dispatch WAL records,&lt;br /&gt;
** Error page registration: collects error pages from other worker.   Current implementation is using hash functions based on memory context, which is not simple to port it to shared memory.  We can replace this with simpler configuration if we can manage such information using shared memory.&lt;br /&gt;
** Transaction worker: replays WAL record which does not have any block information to update.&lt;br /&gt;
** Block worker: replays block information (mostly HEAP/HEAP2).&lt;br /&gt;
&lt;br /&gt;
We can have more than one block workers.  Other workers consists of single process each.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Shared information and locks ====&lt;br /&gt;
&lt;br /&gt;
To pass and share information such as WAL record and status, shared memory defined in &amp;lt;code&amp;gt;storage/dsm.h&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
To protect these data, spin lock defined in &amp;lt;code&amp;gt;storage/spin.h&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Synchronization among workers ====&lt;br /&gt;
&lt;br /&gt;
For light-weight synchronization among workers, unix-domain udp socket is used.   This can be replaced with &amp;lt;code&amp;gt;stoage/latch.h&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== New GUC ====&lt;br /&gt;
&lt;br /&gt;
Following GUC parameters are added:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel_replay&amp;lt;/code&amp;gt; (bool)&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel_replay_test&amp;lt;/code&amp;gt; (bool, just internal) enable additional code to work to attach workers with gdb for test.&lt;br /&gt;
* &amp;lt;code&amp;gt;num_preplay_workers&amp;lt;/code&amp;gt; (int)  number of total replay workers.&lt;br /&gt;
* &amp;lt;code&amp;gt;num_preplay_queue&amp;lt;/code&amp;gt; (int) number of queues holding outstanding WAL records,&lt;br /&gt;
* &amp;lt;code&amp;gt;num_preplay_max_txn&amp;lt;/code&amp;gt; (int) number of max outstanding transaction allowed in recovery.   Max_connections or larger.   In the case of replication slave, must be master&#039;s max_connections or larger.&lt;br /&gt;
* &amp;lt;code&amp;gt;preplay_buffers&amp;lt;/code&amp;gt; (int)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Current code ===&lt;br /&gt;
&lt;br /&gt;
Current code is available from [https://github.com/koichi-szk/postgres.git Koichi&#039;s GITHub repository].   Branch is &amp;lt;code&amp;gt;parallel_replay_14_2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Current code status ===&lt;br /&gt;
&lt;br /&gt;
No test yet.   The code just pass the build and under the review before testing.  Now a couple of functions need improvement/development and some others are influenced by this change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Any cooperation for discussion/test/development is very very welcome.&#039;&#039;&#039;   You can contact to koichi.dbms_at_gmail.com.&lt;br /&gt;
&lt;br /&gt;
Please understand that the repo can be incomplete due to occasional work.&lt;br /&gt;
&lt;br /&gt;
Further addition is:&lt;br /&gt;
&lt;br /&gt;
* To add a code to have WAL record in text format (like pg_waldump) and hold it to some portion of the memory to help the test.   &amp;lt;code&amp;gt;xlog_outrec()&amp;lt;/code&amp;gt; looks very useful for this purpose.   At present, this is enabled with &amp;lt;code&amp;gt;WAL_DEBUG&amp;lt;/code&amp;gt; flag.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Query_Parsing&amp;diff=35791</id>
		<title>Query Parsing</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Query_Parsing&amp;diff=35791"/>
		<updated>2021-03-19T07:47:43Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Query Parsing ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are quite a few use cases where it&#039;d be of great help if you could access the query tree Postgres uses internally for processing queries.&lt;br /&gt;
&lt;br /&gt;
For example, when you need to do non-trivial operations on queries, like:&lt;br /&gt;
&lt;br /&gt;
* Filtering out queries containing specific tables&lt;br /&gt;
* Reformatting &amp;amp; pretty-printing query strings&lt;br /&gt;
* Modifying or removing parts of the query string, e.g. rename a column&lt;br /&gt;
&lt;br /&gt;
The [http://www.postgresql.org/docs/current/static/overview.html Postgres documentation] gives a good overview how query execution is handled and what the intermediate tree representations of a query string are.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Approaches ===&lt;br /&gt;
&lt;br /&gt;
==== Using Postgres internals ====&lt;br /&gt;
&lt;br /&gt;
Postgres already offers tooling to create a query tree from a given query string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;raw_parser&amp;lt;/code&amp;gt; takes a query statement as input and will return a parse tree. This parse tree can then be pretty-printed by using &amp;lt;code&amp;gt;nodeToString&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example can be seen [https://github.com/pganalyze/queryparser/blob/master/queryparser.c here], this can be easily implemented in a [http://www.postgresql.org/docs/current/static/extend-extensions.html Postgres extension] as well as seen [https://github.com/pganalyze/queryparser/blob/master/extension/annotate_query.c here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    SELECT * FROM foo where bar = 42 ORDER BY id DESC LIMIT 23;&lt;br /&gt;
    (&lt;br /&gt;
       {SELECT &lt;br /&gt;
       :distinctClause &amp;lt;&amp;gt; &lt;br /&gt;
       :intoClause &amp;lt;&amp;gt; &lt;br /&gt;
       :targetList (&lt;br /&gt;
          {RESTARGET &lt;br /&gt;
          :name &amp;lt;&amp;gt; &lt;br /&gt;
          :indirection &amp;lt;&amp;gt; &lt;br /&gt;
          :val &lt;br /&gt;
             {COLUMNREF &lt;br /&gt;
             :fields (&lt;br /&gt;
                {A_STAR&lt;br /&gt;
                }&lt;br /&gt;
             )&lt;br /&gt;
             :location 7&lt;br /&gt;
             }&lt;br /&gt;
          :location 7&lt;br /&gt;
          }&lt;br /&gt;
       )&lt;br /&gt;
       :fromClause (&lt;br /&gt;
          {RANGEVAR &lt;br /&gt;
          :schemaname &amp;lt;&amp;gt; &lt;br /&gt;
          :relname foo &lt;br /&gt;
          :inhOpt 2 &lt;br /&gt;
          :relpersistence p &lt;br /&gt;
          :alias &amp;lt;&amp;gt; &lt;br /&gt;
          :location 14&lt;br /&gt;
          }&lt;br /&gt;
       )&lt;br /&gt;
       :whereClause &lt;br /&gt;
          {AEXPR  &lt;br /&gt;
          :name (&amp;quot;=&amp;quot;)&lt;br /&gt;
          :lexpr &lt;br /&gt;
             {COLUMNREF &lt;br /&gt;
             :fields (&amp;quot;bar&amp;quot;)&lt;br /&gt;
             :location 24&lt;br /&gt;
             }&lt;br /&gt;
          :rexpr &lt;br /&gt;
             {A_CONST &lt;br /&gt;
             :val 42 &lt;br /&gt;
             :location 30&lt;br /&gt;
             }&lt;br /&gt;
          :location 28&lt;br /&gt;
          }&lt;br /&gt;
       :groupClause &amp;lt;&amp;gt; &lt;br /&gt;
       :havingClause &amp;lt;&amp;gt; &lt;br /&gt;
       :windowClause &amp;lt;&amp;gt; &lt;br /&gt;
       :valuesLists &amp;lt;&amp;gt; &lt;br /&gt;
       :sortClause (&lt;br /&gt;
          {SORTBY &lt;br /&gt;
          :node &lt;br /&gt;
             {COLUMNREF &lt;br /&gt;
             :fields (&amp;quot;id&amp;quot;)&lt;br /&gt;
             :location 42&lt;br /&gt;
             }&lt;br /&gt;
          :sortby_dir 2 &lt;br /&gt;
          :sortby_nulls 0 &lt;br /&gt;
          :useOp &amp;lt;&amp;gt; &lt;br /&gt;
          :location -1&lt;br /&gt;
          }&lt;br /&gt;
       )&lt;br /&gt;
       :limitOffset &amp;lt;&amp;gt; &lt;br /&gt;
       :limitCount &lt;br /&gt;
          {A_CONST &lt;br /&gt;
          :val 23 &lt;br /&gt;
          :location 56&lt;br /&gt;
          }&lt;br /&gt;
       :lockingClause &amp;lt;&amp;gt; &lt;br /&gt;
       :withClause &amp;lt;&amp;gt; &lt;br /&gt;
       :op 0 &lt;br /&gt;
       :all false &lt;br /&gt;
       :larg &amp;lt;&amp;gt; &lt;br /&gt;
       :rarg &amp;lt;&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
    )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This approach isn&#039;t without caveats though, since the nodeToString code is used only for printing out planned query trees. These trees are rewritten to contain only contain nodes ultimately needed by the [http://www.postgresql.org/docs/current/static/executor.html Executor]. This means that all nodes not expected in later stages of query execution can&#039;t be printed, for example INSERT/UPDATE/DELETE nodes - since later on these are all aggregated in a &amp;lt;code&amp;gt;ModifyStmt&amp;lt;/code&amp;gt; node.&lt;br /&gt;
&lt;br /&gt;
==== pg_query ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pganalyze/pg_query pg_query] is a Ruby gem which can generate query trees in JSON representation. It accomplishes this by using a patched Postgres version which on one hand addresses the shortcomings outlined above, and on the other hand it provides a new function [https://github.com/pganalyze/postgres/blob/172e1dfc81705e9b14d81e8ef56c54b10ddfcd65/src/backend/nodes/outfuncs_json.c#L3502 &amp;lt;code&amp;gt;nodeToJSONString&amp;lt;/code&amp;gt;] which turns a query tree into a JSON representation instead of the native Postgres format.&lt;br /&gt;
&lt;br /&gt;
The Ruby bindings are just glue code around the Postgres code. More information can be found in this [https://pganalyze.com/blog/parse-postgresql-queries-in-ruby.html blog post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    #&amp;lt;PgQuery:0x000000009673a0&lt;br /&gt;
     @query=&amp;quot;SELECT * FROM foo where bar = 42 ORDER BY id DESC LIMIT 23;&amp;quot;,&lt;br /&gt;
     @parsetree=&lt;br /&gt;
      [{&amp;quot;SELECT&amp;quot;=&amp;gt;&lt;br /&gt;
         {&amp;quot;distinctClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;intoClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;targetList&amp;quot;=&amp;gt;&lt;br /&gt;
           [{&amp;quot;RESTARGET&amp;quot;=&amp;gt;&lt;br /&gt;
              {&amp;quot;name&amp;quot;=&amp;gt;nil,&lt;br /&gt;
               &amp;quot;indirection&amp;quot;=&amp;gt;nil,&lt;br /&gt;
               &amp;quot;val&amp;quot;=&amp;gt;{&amp;quot;COLUMNREF&amp;quot;=&amp;gt;{&amp;quot;fields&amp;quot;=&amp;gt;[{&amp;quot;A_STAR&amp;quot;=&amp;gt;{}}], &amp;quot;location&amp;quot;=&amp;gt;7}},&lt;br /&gt;
               &amp;quot;location&amp;quot;=&amp;gt;7}}],&lt;br /&gt;
          &amp;quot;fromClause&amp;quot;=&amp;gt;&lt;br /&gt;
           [{&amp;quot;RANGEVAR&amp;quot;=&amp;gt;&lt;br /&gt;
              {&amp;quot;schemaname&amp;quot;=&amp;gt;nil,&lt;br /&gt;
               &amp;quot;relname&amp;quot;=&amp;gt;&amp;quot;foo&amp;quot;,&lt;br /&gt;
               &amp;quot;inhOpt&amp;quot;=&amp;gt;2,&lt;br /&gt;
               &amp;quot;relpersistence&amp;quot;=&amp;gt;&amp;quot;p&amp;quot;,&lt;br /&gt;
               &amp;quot;alias&amp;quot;=&amp;gt;nil,&lt;br /&gt;
               &amp;quot;location&amp;quot;=&amp;gt;14}}],&lt;br /&gt;
          &amp;quot;whereClause&amp;quot;=&amp;gt;&lt;br /&gt;
           {&amp;quot;AEXPR&amp;quot;=&amp;gt;&lt;br /&gt;
             {&amp;quot;name&amp;quot;=&amp;gt;[&amp;quot;=&amp;quot;],&lt;br /&gt;
              &amp;quot;lexpr&amp;quot;=&amp;gt;{&amp;quot;COLUMNREF&amp;quot;=&amp;gt;{&amp;quot;fields&amp;quot;=&amp;gt;[&amp;quot;bar&amp;quot;], &amp;quot;location&amp;quot;=&amp;gt;24}},&lt;br /&gt;
              &amp;quot;rexpr&amp;quot;=&amp;gt;{&amp;quot;A_CONST&amp;quot;=&amp;gt;{&amp;quot;val&amp;quot;=&amp;gt;42, &amp;quot;location&amp;quot;=&amp;gt;30}},&lt;br /&gt;
              &amp;quot;location&amp;quot;=&amp;gt;28}},&lt;br /&gt;
          &amp;quot;groupClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;havingClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;windowClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;valuesLists&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;sortClause&amp;quot;=&amp;gt;&lt;br /&gt;
           [{&amp;quot;SORTBY&amp;quot;=&amp;gt;&lt;br /&gt;
              {&amp;quot;node&amp;quot;=&amp;gt;{&amp;quot;COLUMNREF&amp;quot;=&amp;gt;{&amp;quot;fields&amp;quot;=&amp;gt;[&amp;quot;id&amp;quot;], &amp;quot;location&amp;quot;=&amp;gt;42}},&lt;br /&gt;
               &amp;quot;sortby_dir&amp;quot;=&amp;gt;2,&lt;br /&gt;
               &amp;quot;sortby_nulls&amp;quot;=&amp;gt;0,&lt;br /&gt;
               &amp;quot;useOp&amp;quot;=&amp;gt;nil,&lt;br /&gt;
               &amp;quot;location&amp;quot;=&amp;gt;-1}}],&lt;br /&gt;
          &amp;quot;limitOffset&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;limitCount&amp;quot;=&amp;gt;{&amp;quot;A_CONST&amp;quot;=&amp;gt;{&amp;quot;val&amp;quot;=&amp;gt;23, &amp;quot;location&amp;quot;=&amp;gt;56}},&lt;br /&gt;
          &amp;quot;lockingClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;withClause&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;op&amp;quot;=&amp;gt;0,&lt;br /&gt;
          &amp;quot;all&amp;quot;=&amp;gt;false,&lt;br /&gt;
          &amp;quot;larg&amp;quot;=&amp;gt;nil,&lt;br /&gt;
          &amp;quot;rarg&amp;quot;=&amp;gt;nil}}],&lt;br /&gt;
     @warnings=[]&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== pgpool-II ====&lt;br /&gt;
&lt;br /&gt;
pgpool-II is a middleware for Postgresql which in it&#039;s simplest use-case is an connection broker between client and database servers.&lt;br /&gt;
&lt;br /&gt;
To be able to do advanced query routing it needs to understand the queries it gets sent form the query. To be able to do that, the pgpool project forked the parser and implemented their own node &amp;lt;code&amp;gt;outFuncs&amp;lt;/code&amp;gt; to be able to recreated a query string from a given query tree.&lt;br /&gt;
&lt;br /&gt;
If you want to create your own as correct as possible Postgres query pretty-printer this might be a good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sqlparse ====&lt;br /&gt;
&lt;br /&gt;
[https://pypi.python.org/pypi/sqlparse sqlparse] is a Python module which implements a non-validating SQL parser suitable for parsing, splitting and formatting SQL statements. It provides the backbone for http://sqlformat.org/ - a SQL pretty printer.&lt;br /&gt;
&lt;br /&gt;
Introspection into the queries is quite limited and since it&#039;s not specifically targeted at Postgres it&#039;s capabilities are quite limited when it comes to drilling down into query trees.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
To make life easier for people using query trees the following things need to be addressed in Postgres core:&lt;br /&gt;
&lt;br /&gt;
* Implement outFuncs for all node types and not only those seen in a post-planning state.&lt;br /&gt;
* Ship alternate outFuncs suitable for generating e.g. JSON trees instead of the native Postgres tree format.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Speaker_Bureau&amp;diff=35448</id>
		<title>Speaker Bureau</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Speaker_Bureau&amp;diff=35448"/>
		<updated>2020-10-09T05:27:44Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to help with the challenge of finding speakers for meetups please add your name to this page if you are willing to speak at a meetup. Currently (2020) the meetups will be virtual. At a minimum add your name, topic(s) and timezone. Feel free to add anything else you feel is relevant.&lt;br /&gt;
&lt;br /&gt;
I&#039;d invite anyone who wants to mentor new speakers to add their name as mentor as well.&lt;br /&gt;
&lt;br /&gt;
* Dave Cramer: Java and Postgresql, Logical Decoding, mentor&lt;br /&gt;
* Jonathan Katz: SCRAM, PostgreSQL + Kubernetes, PostgreSQL 13, Range Types + Applications, Building an App with a bunch of Postgres features (Logical decoding, CTEs, functions, range types, etc.), Data Types&lt;br /&gt;
* Stephen Frost: Security, PostgreSQL, other stuff&lt;br /&gt;
* Keith Fiske: Partitioning, Extensions, Administration, PG History &amp;amp; Features, Monitoring&lt;br /&gt;
* David Christensen: Replication, Bucardo, CTEs.&lt;br /&gt;
* David Fetter: PostgreSQL as a control plane, Fun with Foreign Data Wrappers, Hacking for Beginners&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Logical_Decoding_Plugins&amp;diff=34828</id>
		<title>Logical Decoding Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Logical_Decoding_Plugins&amp;diff=34828"/>
		<updated>2020-04-18T20:28:15Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* JSON format plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.postgresql.org/docs/current/static/logicaldecoding.html Logical decoding] provides the ability to stream modifications made via SQL to external consumers.&lt;br /&gt;
&lt;br /&gt;
To be able to use logical decoding you need to install a plugin into postgresql to transform the WAL internal representation to a format the client can use.&lt;br /&gt;
&lt;br /&gt;
=== JSON format plugins ===&lt;br /&gt;
&lt;br /&gt;
==== wal2json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/eulerto/wal2json&lt;br /&gt;
&lt;br /&gt;
JSON output plugin for changeset extraction&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;change&amp;quot;: [&lt;br /&gt;
 	{&lt;br /&gt;
 		&amp;quot;kind&amp;quot;: &amp;quot;insert&amp;quot;,&lt;br /&gt;
 		&amp;quot;schema&amp;quot;: &amp;quot;public&amp;quot;,&lt;br /&gt;
 		&amp;quot;table&amp;quot;: &amp;quot;table_with_pk&amp;quot;,&lt;br /&gt;
 		&amp;quot;columnnames&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
 		&amp;quot;columntypes&amp;quot;: [&amp;quot;int4&amp;quot;, &amp;quot;varchar&amp;quot;, &amp;quot;timestamp&amp;quot;],&lt;br /&gt;
 		&amp;quot;columnvalues&amp;quot;: [1, &amp;quot;Backup and Restore&amp;quot;, &amp;quot;2015-08-27 16:46:35.818038&amp;quot;]&lt;br /&gt;
 	}]&lt;br /&gt;
&lt;br /&gt;
==== decoding-json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/leptonix/decoding-json&lt;br /&gt;
&lt;br /&gt;
This plugin receives the changes from WAL and decodes them to JSON.&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;transaction.begin&amp;quot;,&amp;quot;xid&amp;quot;:&amp;quot;2010561&amp;quot;,&amp;quot;committed&amp;quot;:&amp;quot;2015-04-22 19:23:35.714443+00&amp;quot;}&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;change&amp;quot;:&amp;quot;INSERT&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7,&amp;quot;c&amp;quot;:42}}&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;change&amp;quot;:&amp;quot;UPDATE&amp;quot;,&amp;quot;key&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7},&amp;quot;data&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7,&amp;quot;c&amp;quot;:13}}&lt;br /&gt;
&lt;br /&gt;
==== decoder_json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/ildus/decoder_json&lt;br /&gt;
&lt;br /&gt;
Uses libjansson for json generation rather than native postgresql code&lt;br /&gt;
&lt;br /&gt;
==== jsoncdc ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/instructure/jsoncdc&lt;br /&gt;
&lt;br /&gt;
Written in rust&lt;br /&gt;
&lt;br /&gt;
==== wal2mongo ====&lt;br /&gt;
&lt;br /&gt;
Translates changesets into a format consumable directly by MongoDB&lt;br /&gt;
&lt;br /&gt;
https://github.com/HighgoSoftware/wal2mongo&lt;br /&gt;
&lt;br /&gt;
=== Protobuf Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== decoderbufs ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/xstevens/decoderbufs&lt;br /&gt;
&lt;br /&gt;
decoderbufs is a PostgreSQL logical decoder output plugin to deliver data as Protocol Buffers.&lt;br /&gt;
&lt;br /&gt;
==== postgres-decoderbufs ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/debezium/postgres-decoderbufs&lt;br /&gt;
&lt;br /&gt;
A fork of xstevens/decoderbufs for use as a [http://debezium.io/ debezium] connector&lt;br /&gt;
&lt;br /&gt;
==== pg_pb3_ld ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/johto/pg_pb3_ld&lt;br /&gt;
&lt;br /&gt;
work in progress&lt;br /&gt;
&lt;br /&gt;
=== Avro Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== Bottled Water ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/confluentinc/bottledwater-pg&lt;br /&gt;
&lt;br /&gt;
Streams into Kafka. No longer supported.&lt;br /&gt;
&lt;br /&gt;
=== SQL Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== decoder_raw ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/michaelpq/pg_plugins/tree/master/decoder_raw&lt;br /&gt;
&lt;br /&gt;
This output plugin for logical replication generates raw queries based&lt;br /&gt;
on the logical changes it finds. Those queries can be consumed as they&lt;br /&gt;
are by any remote source.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== test_decoding ====&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/docs/current/static/test-decoding.html contrib/test_decoding] is example code for a logical decoding output plugin. It describes itself as &amp;quot;doesn&#039;t do anything especially useful, but can serve as a starting point for developing your own decoder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
People have written code to parse the output from this plugin, but that doesn&#039;t make it a good idea:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/davecramer/LogicalDecode - java&lt;br /&gt;
* https://github.com/lisael/pylogicaldecoding - python&lt;br /&gt;
* https://github.com/kibae/pg-logical-replication - node.js&lt;br /&gt;
&lt;br /&gt;
==== osm-logical ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/zerebubuth/osm-logical&lt;br /&gt;
&lt;br /&gt;
Toy code for use with openstreetmaps. Looks to be based on test_decoding.&lt;br /&gt;
&lt;br /&gt;
==== pglogical ====&lt;br /&gt;
&lt;br /&gt;
https://www.2ndquadrant.com/en/resources/pglogical/&lt;br /&gt;
&lt;br /&gt;
pglogical is a logical replication system, implemented as a postgresql extension&lt;br /&gt;
&lt;br /&gt;
==== transicator ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/apigee-labs/transicator&lt;br /&gt;
&lt;br /&gt;
transicator reads from a single logical decoding connection and replicates change out to many (thousands) of intermittently connected clients via a REST API&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Logical_Decoding_Plugins&amp;diff=34827</id>
		<title>Logical Decoding Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Logical_Decoding_Plugins&amp;diff=34827"/>
		<updated>2020-04-18T20:25:46Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Changed to current URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.postgresql.org/docs/current/static/logicaldecoding.html Logical decoding] provides the ability to stream modifications made via SQL to external consumers.&lt;br /&gt;
&lt;br /&gt;
To be able to use logical decoding you need to install a plugin into postgresql to transform the WAL internal representation to a format the client can use.&lt;br /&gt;
&lt;br /&gt;
=== JSON format plugins ===&lt;br /&gt;
&lt;br /&gt;
==== wal2json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/eulerto/wal2json&lt;br /&gt;
&lt;br /&gt;
JSON output plugin for changeset extraction&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;change&amp;quot;: [&lt;br /&gt;
 	{&lt;br /&gt;
 		&amp;quot;kind&amp;quot;: &amp;quot;insert&amp;quot;,&lt;br /&gt;
 		&amp;quot;schema&amp;quot;: &amp;quot;public&amp;quot;,&lt;br /&gt;
 		&amp;quot;table&amp;quot;: &amp;quot;table_with_pk&amp;quot;,&lt;br /&gt;
 		&amp;quot;columnnames&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
 		&amp;quot;columntypes&amp;quot;: [&amp;quot;int4&amp;quot;, &amp;quot;varchar&amp;quot;, &amp;quot;timestamp&amp;quot;],&lt;br /&gt;
 		&amp;quot;columnvalues&amp;quot;: [1, &amp;quot;Backup and Restore&amp;quot;, &amp;quot;2015-08-27 16:46:35.818038&amp;quot;]&lt;br /&gt;
 	}]&lt;br /&gt;
&lt;br /&gt;
==== decoding-json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/leptonix/decoding-json&lt;br /&gt;
&lt;br /&gt;
This plugin receives the changes from WAL and decodes them to JSON.&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;transaction.begin&amp;quot;,&amp;quot;xid&amp;quot;:&amp;quot;2010561&amp;quot;,&amp;quot;committed&amp;quot;:&amp;quot;2015-04-22 19:23:35.714443+00&amp;quot;}&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;change&amp;quot;:&amp;quot;INSERT&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7,&amp;quot;c&amp;quot;:42}}&lt;br /&gt;
 {&amp;quot;type&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;change&amp;quot;:&amp;quot;UPDATE&amp;quot;,&amp;quot;key&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7},&amp;quot;data&amp;quot;:{&amp;quot;a&amp;quot;:6,&amp;quot;b&amp;quot;:7,&amp;quot;c&amp;quot;:13}}&lt;br /&gt;
&lt;br /&gt;
==== decoder_json ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/ildus/decoder_json&lt;br /&gt;
&lt;br /&gt;
Uses libjansson for json generation rather than native postgresql code&lt;br /&gt;
&lt;br /&gt;
==== jsoncdc ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/instructure/jsoncdc&lt;br /&gt;
&lt;br /&gt;
Written in rust&lt;br /&gt;
&lt;br /&gt;
=== Protobuf Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== decoderbufs ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/xstevens/decoderbufs&lt;br /&gt;
&lt;br /&gt;
decoderbufs is a PostgreSQL logical decoder output plugin to deliver data as Protocol Buffers.&lt;br /&gt;
&lt;br /&gt;
==== postgres-decoderbufs ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/debezium/postgres-decoderbufs&lt;br /&gt;
&lt;br /&gt;
A fork of xstevens/decoderbufs for use as a [http://debezium.io/ debezium] connector&lt;br /&gt;
&lt;br /&gt;
==== pg_pb3_ld ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/johto/pg_pb3_ld&lt;br /&gt;
&lt;br /&gt;
work in progress&lt;br /&gt;
&lt;br /&gt;
=== Avro Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== Bottled Water ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/confluentinc/bottledwater-pg&lt;br /&gt;
&lt;br /&gt;
Streams into Kafka. No longer supported.&lt;br /&gt;
&lt;br /&gt;
=== SQL Format Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== decoder_raw ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/michaelpq/pg_plugins/tree/master/decoder_raw&lt;br /&gt;
&lt;br /&gt;
This output plugin for logical replication generates raw queries based&lt;br /&gt;
on the logical changes it finds. Those queries can be consumed as they&lt;br /&gt;
are by any remote source.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Plugins ===&lt;br /&gt;
&lt;br /&gt;
==== test_decoding ====&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/docs/current/static/test-decoding.html contrib/test_decoding] is example code for a logical decoding output plugin. It describes itself as &amp;quot;doesn&#039;t do anything especially useful, but can serve as a starting point for developing your own decoder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
People have written code to parse the output from this plugin, but that doesn&#039;t make it a good idea:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/davecramer/LogicalDecode - java&lt;br /&gt;
* https://github.com/lisael/pylogicaldecoding - python&lt;br /&gt;
* https://github.com/kibae/pg-logical-replication - node.js&lt;br /&gt;
&lt;br /&gt;
==== osm-logical ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/zerebubuth/osm-logical&lt;br /&gt;
&lt;br /&gt;
Toy code for use with openstreetmaps. Looks to be based on test_decoding.&lt;br /&gt;
&lt;br /&gt;
==== pglogical ====&lt;br /&gt;
&lt;br /&gt;
https://www.2ndquadrant.com/en/resources/pglogical/&lt;br /&gt;
&lt;br /&gt;
pglogical is a logical replication system, implemented as a postgresql extension&lt;br /&gt;
&lt;br /&gt;
==== transicator ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/apigee-labs/transicator&lt;br /&gt;
&lt;br /&gt;
transicator reads from a single logical decoding connection and replicates change out to many (thousands) of intermittently connected clients via a REST API&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_vs_SQL_Standard&amp;diff=34687</id>
		<title>PostgreSQL vs SQL Standard</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_vs_SQL_Standard&amp;diff=34687"/>
		<updated>2020-03-01T20:09:02Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Major features simply not implemented yet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page attempts to document those instances where PostgreSQL deviates from standard SQL. It is not necessarily complete, and doesn&#039;t attempt to include all cases where an optional feature is not implemented or only partially implemented.&lt;br /&gt;
&lt;br /&gt;
== Issues not yet classified ==&lt;br /&gt;
&lt;br /&gt;
=== NOT NULL constraints on composite-type columns ===&lt;br /&gt;
&lt;br /&gt;
The spec defines a &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; column constraint as being equivalent to &amp;lt;code&amp;gt;CHECK(&amp;lt;i&amp;gt;column&amp;lt;/i&amp;gt; IS NOT NULL)&amp;lt;/code&amp;gt;, thus importing the semantics of composite-type null tests.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; as a simple &amp;quot;is not the null value&amp;quot; test, and therefore allows a row value with some null fields to be stored contrary to the spec.&lt;br /&gt;
&lt;br /&gt;
=== COALESCE on row types ===&lt;br /&gt;
&lt;br /&gt;
The spec defines &amp;lt;code&amp;gt;COALESCE(X,Y)&amp;lt;/code&amp;gt; as a syntactic transformation to &amp;lt;code&amp;gt;CASE WHEN X IS NOT NULL THEN X ELSE Y END&amp;lt;/code&amp;gt; (it leaves open the question of whether X is really evaluated twice by disallowing non-deterministic expressions or expressions with side effects in this context). A consequence of this is that the rather odd rules for null tests of row types are applied.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL applies only the &amp;quot;is not the null value&amp;quot; test to X. Accordingly, if X is a row value containing null columns, PostgreSQL will return X, while the spec would require returning Y.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fixable issues ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, but there appears to be no major obstacle to changing it to conform.&lt;br /&gt;
&lt;br /&gt;
=== Wrong return type for extract() ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that &amp;lt;code&amp;gt;extract()&amp;lt;/code&amp;gt; return an exact numeric type.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL returns an approximate numeric type (&amp;lt;code&amp;gt;double precision&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
There are obviously some backward compatibility concerns that would have to be considered before changing this one, but they don&#039;t look serious.&lt;br /&gt;
&lt;br /&gt;
Note: date/time types support &#039;infinity&#039; but numeric doesn&#039;t, so that would have to be resolved first.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete syntax for substring() ===&lt;br /&gt;
&lt;br /&gt;
The spec has a form of substring() which is: &amp;lt;code&amp;gt;substring(&amp;lt;string&amp;gt; SIMILAR &amp;lt;pattern&amp;gt;[ ESCAPE &amp;lt;escape char&amp;gt;])&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL does not support this form but does support the same functionality under the form &amp;lt;code&amp;gt;substring(&amp;lt;string&amp;gt; FROM &amp;lt;pattern&amp;gt; FOR &amp;lt;escape char&amp;gt;)&amp;lt;/code&amp;gt;, which used to be correct back in 1999 when PostgreSQL implemented it.&lt;br /&gt;
&lt;br /&gt;
Note that the escape character is required, otherwise the function uses regular expressions instead of &amp;lt;code&amp;gt;SIMILAR TO&amp;lt;/code&amp;gt; pattern matching!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues with some block to implementation ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, or where an otherwise desirable feature is missing, but there is some technical issue that would make it harder to implement.&lt;br /&gt;
&lt;br /&gt;
=== LISTAGG() ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LISTAGG()&amp;lt;/code&amp;gt; is the standard SQL equivalent of our &amp;lt;code&amp;gt;string_agg()&amp;lt;/code&amp;gt;, but it uses the ordered-set aggregate syntax.&lt;br /&gt;
&lt;br /&gt;
Implementing this in the most straightforward way would require erasing many of the existing distinctions between ordered-set aggregate syntax and conventional aggregate syntax. Currently we require that ordered-set aggs be called using &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt;, while ordinary aggs must not use &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt; but may have an embedded &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; clause in their arguments (as per the standard &amp;lt;code&amp;gt;ARRAY_AGG()&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LISTAGG()&amp;lt;/code&amp;gt; does not have the semantics of an ordered-set aggregate, so implementing it other than as a special case would mean allowing ordinary aggs to be called using &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt; as an alternative to their normal syntax.&lt;br /&gt;
&lt;br /&gt;
=== Data change delta tables ===&lt;br /&gt;
&lt;br /&gt;
These are the standard&#039;s closest equivalent to our &amp;lt;code&amp;gt;RETURNING&amp;lt;/code&amp;gt; and writable CTEs, but the visibility and trigger firing rules appear to be different to those of wCTEs, so one can&#039;t be implemented in terms of the other.&lt;br /&gt;
&lt;br /&gt;
=== Identifier lengths ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that identifiers be allowed up to 18 characters even if the &amp;quot;long identifiers&amp;quot; feature is not declared; if it is, then the limit is 128 characters. Note that this limit is in characters and not bytes.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL limits the significant length of an identifier to 63 &#039;&#039;&#039;bytes&#039;&#039;&#039; unless specified otherwise at compile time; this isn&#039;t enough for 18 unicode characters.&lt;br /&gt;
&lt;br /&gt;
Currently we use the fixed-length &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; type for names; making it larger would significantly inflate the sizes of many system catalogs, while making it variable length would be a compatibility issue (e.g. changing the order of columns in many system catalogs to put the name field after the fixed-length fields).&lt;br /&gt;
&lt;br /&gt;
=== DISTINCT aggregates as window functions ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL does not allow &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; in aggregates when they are invoked as window functions.&lt;br /&gt;
&lt;br /&gt;
The existing implementation of &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; would be quite hard to adapt to window functions.&lt;br /&gt;
&lt;br /&gt;
=== Deferrable CHECK and NOT NULL ===&lt;br /&gt;
&lt;br /&gt;
The spec defines &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; in terms of &amp;lt;code&amp;gt;CHECK&amp;lt;/code&amp;gt;, and allows &amp;lt;code&amp;gt;CHECK&amp;lt;/code&amp;gt; constraints to be deferrable.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL currently does all these checks before actually inserting the new or modified row.&lt;br /&gt;
&lt;br /&gt;
=== FULL OUTER JOIN conditions ===&lt;br /&gt;
&lt;br /&gt;
The spec allows any join condition for a &amp;lt;code&amp;gt;FULL OUTER JOIN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL currently limits such conditions to ones that are implementable without constructing explicit &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; operations; that is, the condition must be hashable, mergeable, or constant.&lt;br /&gt;
&lt;br /&gt;
Adding support for arbitrary full joins (which would likely require constructing a &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; of the inner join and the two anti-joins) seems like a lot of work for minimal gain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Issues with some block at design level ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, or where an otherwise desirable feature is missing, but there is some technical issue that makes it hard to even decide how to implement it.&lt;br /&gt;
&lt;br /&gt;
=== ANY() and SOME() aggregates ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL supports &amp;lt;code&amp;gt;every()&amp;lt;/code&amp;gt; from the standard, and provides &amp;lt;code&amp;gt;bool_or&amp;lt;/code&amp;gt; as a nonstandard spelling of the &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;SOME&amp;lt;/code&amp;gt; aggregate function, but two syntax conflicts make it impossible to parse the standard&#039;s &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt; syntax:&lt;br /&gt;
&lt;br /&gt;
# PostgreSQL allows &amp;lt;code&amp;gt;= ANY (array_expression)&amp;lt;/code&amp;gt; as a form of quantified comparison predicate (this is an extension to the spec)&lt;br /&gt;
# PostgreSQL allows subselects in all contexts to have additional parentheses, which the spec does not allow&lt;br /&gt;
&lt;br /&gt;
The spec&#039;s syntax for &amp;lt;code&amp;gt;ANY(expression)&amp;lt;/code&amp;gt; as an aggregate function can be parsed unambiguously only because the spec&#039;s version of &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt; as a quantified comparison predicate must have the keyword &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; immediately following the &amp;lt;code&amp;gt;ANY(&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unreserved keywords as select-list aliases without AS ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that &amp;lt;code&amp;gt;SELECT 1 ZONE&amp;lt;/code&amp;gt; be equivalent to &amp;lt;code&amp;gt;SELECT 1 AS ZONE&amp;lt;/code&amp;gt;. PostgreSQL accepts only the latter form or alternatively requires the identifier to be quoted.&lt;br /&gt;
&lt;br /&gt;
The main syntax ambiguity here is caused by the presence of postfix operators in PostgreSQL syntax; &amp;lt;code&amp;gt;SELECT 1 ! ZONE&amp;lt;/code&amp;gt; would be ambiguous between treating the operator as postfix or infix (we take it as being infix in this case by using precedence rules). Additional ambiguities exist with compound type names using &amp;lt;code&amp;gt;NATIONAL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VARYING&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;WITHOUT&amp;lt;/code&amp;gt; (which would likely have to be made reserved words, as they are in the spec). &amp;lt;code&amp;gt;WITHIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FILTER&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;OVER&amp;lt;/code&amp;gt;, and the datetime component names, which are not currently reserved in PostgreSQL, would also need to become reserved words. Since adding so many more reserved words is likely to break existing queries, this isn&#039;t considered a particularly viable solution.&lt;br /&gt;
&lt;br /&gt;
=== DROP DOMAIN … CASCADE ===&lt;br /&gt;
&lt;br /&gt;
The spec says that &amp;lt;code&amp;gt;DROP DOMAIN … CASCADE&amp;lt;/code&amp;gt; does not drop any columns, but simply changes any columns of the domain type to instead use the base type with the addition of the domain&#039;s defaults and constraints.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL drops columns of the domain type.&lt;br /&gt;
&lt;br /&gt;
The issue here is that we can reach a &amp;lt;code&amp;gt;DROP DOMAIN&amp;lt;/code&amp;gt; by cascading from a drop of another object, such as a schema containing the domain or a function referenced in the domain&#039;s default or constraints. Supporting the standard behavior would therefore mean altering objects in ways that add new dependencies from within the code that traverses the existing dependencies, which seems problematic.&lt;br /&gt;
&lt;br /&gt;
=== Temporary tables ===&lt;br /&gt;
&lt;br /&gt;
In the spec, temporary tables are persistent schema objects whose &#039;&#039;data&#039;&#039; (and only the data) is temporary and per-session. Implementing these in PostgreSQL would actually have substantial advantages (catalog bloat when using temp tables heavily is a common problem); but PostgreSQL&#039;s existing behavior is very well-entrenched and changing it would cause compatibility issues.&lt;br /&gt;
&lt;br /&gt;
(One approach sometimes suggested would be to use the spec&#039;s method if &amp;lt;code&amp;gt;GLOBAL&amp;lt;/code&amp;gt; was specified when creating the table.)&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parens in VALUES ===&lt;br /&gt;
&lt;br /&gt;
The spec allows &amp;lt;code&amp;gt;VALUES 1,2,3&amp;lt;/code&amp;gt; (as an explicit table with 1 column, 3 rows).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires parens on each row: &amp;lt;code&amp;gt;VALUES (1),(2),(3)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It looks like the only obstacle here is that &amp;lt;code&amp;gt;VALUES&amp;lt;/code&amp;gt; would need to become a reserved word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Issues where we explicitly choose to disregard the spec (WONTFIX) ==&lt;br /&gt;
&lt;br /&gt;
=== Identifier case ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds unquoted identifiers to lowercase, not the uppercase that the spec requires.&lt;br /&gt;
&lt;br /&gt;
=== Constraint name scope ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats the scope of a table or column constraint name as being the table it belongs to. The spec requires that such names be unique over the whole schema.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s behavior here severely limits the usefulness of several &amp;lt;code&amp;gt;information_schema&amp;lt;/code&amp;gt; views, which are defined on the assumption of schema-wide constraint name uniqueness.&lt;br /&gt;
&lt;br /&gt;
=== TIMESTAMP WITH TIME ZONE ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s timestamp with time zone type is very different from the standard one.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;timestamp &#039;2018-06-01 00:00:00+1200&#039;&amp;lt;/code&amp;gt; is a timestamp without timezone, spec says it should be with timezone.&amp;lt;br&amp;gt;PostgreSQL does not allow the type of a literal to depend on its string value.&lt;br /&gt;
# &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; does not store a timezone offset, but is interpreted with the session timezone.&amp;lt;br&amp;gt;The spec&#039;s timezone handling is less than useless, PostgreSQL&#039;s is actually useful.&lt;br /&gt;
&lt;br /&gt;
=== AT TIME ZONE ===&lt;br /&gt;
&lt;br /&gt;
Our &amp;lt;code&amp;gt;AT TIME ZONE&amp;lt;/code&amp;gt; operator is somewhat different to the spec&#039;s.&lt;br /&gt;
&lt;br /&gt;
The spec says:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time[stamp] without time zone&amp;lt;/code&amp;gt; returns a result of the corresponding &amp;lt;code&amp;gt;with time zone&amp;lt;/code&amp;gt; type.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time[stamp] with time zone&amp;lt;/code&amp;gt;, the result is of the same type.&lt;br /&gt;
&lt;br /&gt;
What PostgreSQL does is:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time without time zone&amp;lt;/code&amp;gt; casts the value of &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; to type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt; and then proceeds as the previous option.&lt;br /&gt;
&lt;br /&gt;
This permits various transforms which are simply not possible in the spec&#039;s crippled timezone support, such as converting a wallclock time from one location to another via two applications of &amp;lt;code&amp;gt;AT TIME ZONE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== INTERVAL ===&lt;br /&gt;
&lt;br /&gt;
The standard interval type assumes that all days are the same length, and therefore intervals can be divided into &amp;quot;year-month&amp;quot; and &amp;quot;day-second&amp;quot; values; only one of which can be present in any single interval value or column.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s interval type has three fields: months,days,[micro]seconds and allows all three to be present simultaneously.&lt;br /&gt;
&lt;br /&gt;
Rationale: the spec&#039;s lack of usable timezone support makes its interval type useless too.&lt;br /&gt;
&lt;br /&gt;
=== Transaction management ===&lt;br /&gt;
&lt;br /&gt;
The spec&#039;s model of the relationship between the database and its clients differs from PostgreSQL&#039;s (and most other databases for that matter). This leaves the spec&#039;s requirements concerning how transactions begin and end as somewhat inconsistent, with some statements being defined as implicitly starting transactions and others not (and some may or may not implicitly start transactions depending on variable content).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats all client requests (which may contain multiple statements) as being wrapped in a transaction (auto-committing at the end of the request) except where &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;START TRANSACTION&amp;lt;/code&amp;gt; is used explicitly.&lt;br /&gt;
&lt;br /&gt;
=== Default transaction isolation level ===&lt;br /&gt;
&lt;br /&gt;
The spec declares &amp;lt;code&amp;gt;SERIALIZABLE&amp;lt;/code&amp;gt; to be the default isolation level, but PostgreSQL defaults to &amp;lt;code&amp;gt;READ COMMITTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Default transaction access mode ===&lt;br /&gt;
&lt;br /&gt;
The spec says that if the &amp;lt;code&amp;gt;READ UNCOMMITTED&amp;lt;/code&amp;gt; isolation level is specified, but no access mode is specified, then the default access mode is &amp;lt;code&amp;gt;READ ONLY&amp;lt;/code&amp;gt;. PostgreSQL uses the &amp;lt;code&amp;gt;default_transaction_read_only&amp;lt;/code&amp;gt; setting instead.&lt;br /&gt;
&lt;br /&gt;
=== Object ownership scope ===&lt;br /&gt;
&lt;br /&gt;
The standard controls ownership of objects only at the schema level; objects inside a schema belong to the schema&#039;s owner.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL tracks ownership at individual object level.&lt;br /&gt;
&lt;br /&gt;
Rationale: this PG behavior dates back to before it had schemas, and is much more flexible than the standard&#039;s approach.&lt;br /&gt;
&lt;br /&gt;
=== Trigger firing order ===&lt;br /&gt;
&lt;br /&gt;
The standard says that trigger firing order on a table depends on creation order of the triggers.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL fires triggers in order of name.&lt;br /&gt;
&lt;br /&gt;
Rationale: documentation says &amp;quot;this was judged to be more convenient&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Trigger firing relative to referential constraint actions ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that when a referential action (e.g. &amp;lt;code&amp;gt;CASCADE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SET NULL&amp;lt;/code&amp;gt;) causes a &amp;lt;code&amp;gt;BEFORE&amp;lt;/code&amp;gt; trigger to be fired, the referential action is actually performed before firing the trigger.&lt;br /&gt;
&lt;br /&gt;
One possible motivation for this is to ensure that the trigger function doesn&#039;t see the inconsistent intermediate state of the database in which the FK is violated.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, PostgreSQL always runs the &amp;lt;code&amp;gt;BEFORE&amp;lt;/code&amp;gt; trigger before doing the operation.&lt;br /&gt;
&lt;br /&gt;
In addition, the spec requires that referential constraints are enforced before &amp;lt;code&amp;gt;AFTER&amp;lt;/code&amp;gt; triggers. PostgreSQL instead enforces them via triggers with names of the form &amp;lt;code&amp;gt;&amp;quot;RI_ConstraintTrigger_…&amp;quot;&amp;lt;/code&amp;gt; which are executed in name order with respect to other triggers (see [[#Trigger_firing_order|this item]]).&lt;br /&gt;
&lt;br /&gt;
=== LIKE with no escape clause ===&lt;br /&gt;
&lt;br /&gt;
The standard says that &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; has no escape character if the &amp;lt;code&amp;gt;ESCAPE&amp;lt;/code&amp;gt; clause was not specified.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats a missing &amp;lt;code&amp;gt;ESCAPE&amp;lt;/code&amp;gt; clause as if it were &amp;lt;code&amp;gt;ESCAPE &#039;\&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rationale: historical.&lt;br /&gt;
&lt;br /&gt;
=== Declared type of string literals ===&lt;br /&gt;
&lt;br /&gt;
The standard says that the type of a string literal is fixed-length character string, i.e. &amp;lt;code&amp;gt;character(&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the length of the literal.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats untyped literals as being of unknown type and deduces the type from context (even in contexts where the spec does not provide for contextual typing). If no type is deduced, the value is treated either as &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;unknown&amp;lt;/code&amp;gt; type depending on context and PostgreSQL version.&lt;br /&gt;
&lt;br /&gt;
=== Trailing spaces in character(n) ===&lt;br /&gt;
&lt;br /&gt;
Trailing spaces in char(n) values are removed in contexts where the spec requires they be kept.&lt;br /&gt;
&lt;br /&gt;
An example is that &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; will remove trailing spaces from a &amp;lt;code&amp;gt;character(n)&amp;lt;/code&amp;gt; pattern parameter (but not from the first parameter).&lt;br /&gt;
&lt;br /&gt;
Rationale: PG actually converts char(n) to text in most contexts and all the relevant functions and operators take text args, rather than having separate versions for char(n).&lt;br /&gt;
&lt;br /&gt;
=== FETCH FIRST 0 ROWS ===&lt;br /&gt;
&lt;br /&gt;
The spec requires an error to be generated for specifying a limit of 0. We generate errors only for values strictly less than 0.&lt;br /&gt;
&lt;br /&gt;
=== Early enforcement of non-deferrable UNIQUE ===&lt;br /&gt;
&lt;br /&gt;
The spec says that &amp;lt;code&amp;gt;UNIQUE&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;PRIMARY KEY&amp;lt;/code&amp;gt;) constraints are enforced at statement end and not row-by-row when in immediate mode, with no distinction between non-deferrable constraints and deferrable constraints currently set to immediate mode.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL enforces non-deferrable constraints row-by-row, and deferrable constraints in immediate mode at statement end. This is a compromise between wanting to preserve the hard semantic guarantees of uniqueness in row-by-row mode (relied on by the planner in order to prove result uniqueness), while allowing conflicting updates (e.g. &amp;lt;code&amp;gt;UPDATE … SET uniq = uniq + 1&amp;lt;/code&amp;gt; where really necessary.&lt;br /&gt;
&lt;br /&gt;
=== Lexing of string literals and comments ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL rejects all of these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- intentionally not using source here--&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
select &#039;foo&#039;&lt;br /&gt;
 /**/ &#039;bar&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; /**/ &#039;bar&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select U&amp;amp;&#039;foo&#039; UESCAPE /**/ &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; as U&amp;amp;&amp;quot;foo&amp;quot; UESCAPE /**/ &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select U&amp;amp;&#039;foo&#039; /**/ UESCAPE &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; as U&amp;amp;&amp;quot;foo&amp;quot; /**/ UESCAPE &#039;x&#039; from ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first of those is certainly legal in the spec; the remainder are more debatable since the spec is rather unclear.&lt;br /&gt;
&lt;br /&gt;
Regarding the second case:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.3 &amp;amp;lt;literal&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
7) In a &amp;lt;code&amp;gt;&amp;amp;lt;character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;national character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;Unicode character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;&amp;amp;lt;binary string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; shall contain a &amp;lt;code&amp;gt;&amp;amp;lt;newline&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But SQL2016 also says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.2 &amp;amp;lt;token&amp;amp;gt; and &amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
11) SQL text containing one or more instances of &amp;lt;code&amp;gt;&amp;amp;lt;comment&amp;amp;gt;&amp;lt;/code&amp;gt; is equivalent to the same SQL text with the &amp;lt;code&amp;gt;&amp;amp;lt;comment&amp;amp;gt;&amp;lt;/code&amp;gt; replaced with &amp;lt;code&amp;gt;&amp;amp;lt;newline&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which implies that the input should have been accepted.&lt;br /&gt;
&lt;br /&gt;
Regarding the remaining cases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.2 &amp;amp;lt;token&amp;amp;gt; and &amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt; ::=&amp;lt;br&amp;gt;  { &amp;amp;lt;comment&amp;amp;gt; | &amp;amp;lt;white space&amp;amp;gt; }...&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
7) Any &amp;lt;code&amp;gt;&amp;amp;lt;token&amp;amp;gt;&amp;lt;/code&amp;gt; may be followed by a &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.3 &amp;amp;lt;literal&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
11) In a &amp;lt;code&amp;gt;&amp;amp;lt;Unicode character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, there shall be no&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; between the &amp;quot;U&amp;quot; and the &amp;lt;code&amp;gt;&amp;amp;lt;ampersand&amp;amp;gt;&amp;lt;/code&amp;gt; nor between the&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;ampersand&amp;amp;gt;&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;&amp;amp;lt;quote&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which seems to imply that &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; around the &amp;lt;code&amp;gt;UESCAPE&amp;lt;/code&amp;gt; would be permitted; indeed, no other rule permits any kind of whitespace there.&lt;br /&gt;
&lt;br /&gt;
There&#039;s no present desire to fix this because of the added complexity in the lexer. It is possible that this could be revisited if the lexer is redesigned in future.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues where PostgreSQL actually conforms to the spec ==&lt;br /&gt;
&lt;br /&gt;
These issues have been claimed or discussed as violations, but where PostgreSQL currently conforms to the spec as written. These are for reference in case they come up again; also, cases where PostgreSQL formerly violated the spec can be noted here as fixed.&lt;br /&gt;
&lt;br /&gt;
=== null return from every(x) ===&lt;br /&gt;
&lt;br /&gt;
In the query &amp;lt;code&amp;gt;SELECT every(x) FROM t;&amp;lt;/code&amp;gt; the result will be &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; has no rows or all values of &amp;lt;code&amp;gt;t.x&amp;lt;/code&amp;gt; are &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. This is correct as per the spec, even though it&#039;s inconsistent with conventional mathematical usage (in which an AND of no terms should return true).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Major features simply not implemented yet ==&lt;br /&gt;
&lt;br /&gt;
*  MATCH PARTIAL&lt;br /&gt;
*  references in typed tables&lt;br /&gt;
*  fetch first … with ties&lt;br /&gt;
*  fetch first … percent&lt;br /&gt;
*  more functional dependencies&lt;br /&gt;
*  row pattern recognition&lt;br /&gt;
*  partition join&lt;br /&gt;
*  distinct types&lt;br /&gt;
*  temporal tables&lt;br /&gt;
*  generated columns (partially implemented)&lt;br /&gt;
*  respect/ignore nulls for window functions&lt;br /&gt;
*  &amp;quot;from last&amp;quot; for nth_value&lt;br /&gt;
*  CAST(val AS type FORMAT &#039;template&#039;)&lt;br /&gt;
*  Mutually recursive common table expressions&lt;br /&gt;
*  many more&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PL_Matrix&amp;diff=34686</id>
		<title>PL Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PL_Matrix&amp;diff=34686"/>
		<updated>2020-03-01T20:03:41Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an attempt to document all the available Procedural Language Handlers for PostgreSQL.&lt;br /&gt;
&#039;&#039;WARNING:&#039;&#039; The information presented here is still very much experimental and guaranteed to be out-of-date ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:16em&amp;quot; | Language&lt;br /&gt;
! Status&lt;br /&gt;
! Availability&lt;br /&gt;
! Named Parameters?&lt;br /&gt;
! OUT Parameters?&lt;br /&gt;
! (Un)Trusted&lt;br /&gt;
! Notes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/pgsql&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | in core&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | compiled by default&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | sql&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | in core&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | yes (version 9.2+)&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | available by default&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/perl&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | in core&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted and Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/python&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | in core&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | support for one OUT parameter from 8.4, multiple from 9.1&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/tcl&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | in core&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted and Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | PL/sh&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/petere/plsh PL/sh]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | no (not useful)&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Untrusted necessarily&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | PL/R&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://joeconway.com/plr PL/R]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/java&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://tada.github.io/pljava/ pl/java]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/lolcode&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Alpha&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [http://pgfoundry.org/projects/pllolcode/ pl/lolcode]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/scheme&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/vy/plscheme pl/scheme]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted and Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/php&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Beta&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://public.commandprompt.com/documents/5 pl/php]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/ruby&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [http://rubyforge.org/projects/plruby/ pl/ruby]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/lua (ng)&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/pllua/pllua-ng/ pl/lua (ng)]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted and Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | install with CREATE EXTENSION&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/pgpsm&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Beta&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [http://www.pgsql.cz/index.php/SQL/PSM  pl/pgpsm]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | SQL/PSM implementation based on pl/pgsql runtime&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | pl/v8&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Production&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/plv8/plv8  pl/v8js]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Trusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | install with CREATE EXTENSION&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | PL/XSLT&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Alpha&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/petere/plxslt  pl/xslt]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | no&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | install with CREATE EXTENSION&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | PL/Julia&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | [https://github.com/pljulia/pljulia pl/julia]&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ffdddd&amp;quot; | ?&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Untrusted&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | install with CREATE EXTENSION&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: For all languages, it is allowed to place parameter names in the function parameter list declaration.  What the &#039;&#039;&#039;Named Parameters&#039;&#039;&#039; column is about is whether the body of the function can refer to the parameters by those names, or whether it has to use some other notation, such as &#039;&#039;$1&#039;&#039;, &#039;&#039;$2&#039;&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
Note: All languages support parameters that are explicitly marked as IN parameters.  Those that support OUT parameters also automatically handle INOUT parameters.&lt;br /&gt;
&lt;br /&gt;
[[Category:Languages]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Todo&amp;diff=34623</id>
		<title>Todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Todo&amp;diff=34623"/>
		<updated>2020-01-30T19:10:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 1ex 1em; float: right;&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list contains some known PostgreSQL bugs, some feature requests, and some things we are not even sure we want. Many of these items are hard, and some are perhaps impossible.  If you would like to work on an item, please read the [[Developer FAQ]] first. There is also a [[Development_information|development information page]].&lt;br /&gt;
&lt;br /&gt;
* {{TodoPending}} - marks ordinary, incomplete items&lt;br /&gt;
* {{TodoEasy}} - marks items that are easier to implement&lt;br /&gt;
* {{TodoDone}} - marks changes that are done, and will appear in the PostgreSQL 13 release.&lt;br /&gt;
&lt;br /&gt;
For help on editing this list, please see [[Talk:Todo]]. &amp;lt;b&amp;gt;Please do not add items here without discussion on the [[Mailing_Lists|mailing list]].&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development Process ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;WARNING for Developers:&amp;lt;/b&amp;gt; Unfortunately this list does not contain all the information necessary for someone to start coding a feature.  Some of these items might have become unnecessary since they were added --- others might be desirable but the implementation might be unclear.  When selecting items listed below, be prepared to first discuss the value of the feature. &#039;&#039;&#039;Do not assume that you can select one, code it and then expect it to be committed.&#039;&#039;&#039; Always discuss design on Hackers list before starting to code.  The flow should be:&lt;br /&gt;
&lt;br /&gt;
     Desirability -&amp;gt; Design -&amp;gt; Implement -&amp;gt; Test -&amp;gt; Review -&amp;gt; Commit&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Check for unreferenced table files created by transactions that were in-progress when the server terminated abruptly&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-06/msg00096.php &amp;lt;nowiki&amp;gt;Removing unreferenced files&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow log_min_messages to be specified on a per-module basis&lt;br /&gt;
|This would allow administrators to see more detailed information from specific sections of the backend, e.g. checkpoints, autovacuum, etc. Another idea is to allow separate configuration files for each module, or allow arbitrary SET commands to be passed to them. See also [[Logging Brainstorm]].}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow custom variables to appear in pg_settings()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00850.php &amp;lt;nowiki&amp;gt;Re: count(*) performance improvement ideas&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have custom variables be transaction-safe&lt;br /&gt;
* {{MessageLink|4B577E9F.8000505@dunslane.net|Custom GUCs still a bit broken}}&lt;br /&gt;
* {{MessageLink|alpine.DEB.2.20.1701081007440.10378@lancre|proposal: session server side variables}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement the SQL-standard mechanism whereby REVOKE ROLE revokes only the privilege granted by the invoking role, and not those granted by other roles&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-05/msg00010.php &amp;lt;nowiki&amp;gt;Re: Grantor name gets lost when grantor role dropped&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent query cancel packets from being replayed by an attacker, especially when using SSL&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-08/msg00345.php &amp;lt;nowiki&amp;gt;Replay attack of query cancel&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider supporting incremental base backups&lt;br /&gt;
* http://www.postgresql.org/message-id/543D5AA7.9@2ndquadrant.it&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration files ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider normalizing fractions in postgresql.conf, perhaps using &#039;%&#039;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg00550.php &amp;lt;nowiki&amp;gt;Fractions in GUC variables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add external tool to auto-tune some postgresql.conf parameters&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00000.php &amp;lt;nowiki&amp;gt;Re: Overhauling GUCS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00033.php &amp;lt;nowiki&amp;gt;Simple postgresql.conf wizard&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow pg_hba.conf to process include files&lt;br /&gt;
* [http://www.postgresql.org/message-id/86fvnm5t44.fsf@jerry.enova.com HBA files w/include support]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create utility to compute accurate random_page_cost value&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00162.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00362.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow synchronous_standby_names to be disabled after communication failure with all synchronous standby servers exceeds some timeout&lt;br /&gt;
|This also requires successful execution of a synchronous notification command.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-07/msg00409.php&lt;br /&gt;
* [http://www.postgresql.org/message-id/BF2827DCCE55594C8D7A8F7FFD3AB7713DD9A622@SZXEML508-MBX.china.huawei.com Standalone synchronous master]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-12/msg01224.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix log_line_prefix to display the transaction id (%x) for statements not in a transaction block&lt;br /&gt;
* Currently it displays zero.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Adjust rounding behavior for numeric GUC values&lt;br /&gt;
* http://www.postgresql.org/message-id/53BE3815.4010203@po.ntts.co.jp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Tablespaces ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow a database in tablespace t1 with tables created in tablespace t2 to be used as a template for a new database created with default tablespace t2&lt;br /&gt;
|Currently all objects in the default database tablespace must have default tablespace specifications. This is because new databases are created by copying directories. If you mix default tablespace tables and tablespace-specified tables in the same directory, creating a new database from such a mixed directory would create a new database with tables that had incorrect explicit tablespaces.  To fix this would require modifying pg_class in the newly copied database, which we don&#039;t currently do.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reporting of which objects are in which tablespaces&lt;br /&gt;
|This item is difficult because a tablespace can contain objects from multiple databases. There is a server-side function that returns the databases which use a specific tablespace, so this requires a tool that will call that function and connect to each database to find the objects in each database for that tablespace.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow WAL replay of CREATE TABLESPACE to work when the directory structure on the recovery computer is different from the original&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180214042443.GB1993%40paquier.xyz Remarks about the difficulty of the item]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow per-tablespace quotas}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow tablespaces on RAM-based partitions for unlogged tables&lt;br /&gt;
* http://archives.postgresql.org/pgsql-advocacy/2011-05/msg00033.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow tablespaces on RAM-based partitions for temporary objects&lt;br /&gt;
* [https://www.postgresql.org/message-id/20170529185308.GB28209@momjian.us Use of non-restart-safe storage by temp_tablespaces]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow toast tables to be moved to a different tablespace&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-05/msg00980.php moving toast table to its own tablespace]&lt;br /&gt;
* {{messageLink|CAFEQCbH756DyyAPQ1ykh3+b+kE1-EhWRww1WO_x5v38C-uLnUg@mail.gmail.com|patch : Allow toast tables to be moved to a different tablespace}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Close race in DROP TABLESPACE on Windows&lt;br /&gt;
* http://www.postgresql.org/message-id/20141108050423.GA642055@tornado.leadboat.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Statistics Collector ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Testing pgstat via pg_regress is tricky and inefficient. Consider making a dedicated pgstat test-suite.&lt;br /&gt;
* [http://www.postgresql.org/message-id/20141216142937.GX1768@alvh.no-ip.org &amp;lt;nowiki&amp;gt;Re: REVIEW: Track TRUNCATE via pgstat&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Track number of WAL files ready to be archived in pg_stat_archiver  &lt;br /&gt;
* [http://www.postgresql.org/message-id/CAB7nPqSCrcZGGy_SmpT7ubSzVGNMtphYU1JJZYyapHuN46E-Tw@mail.gmail.com &amp;lt;nowiki&amp;gt;pg_stat_archiver missing feature&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://www.postgresql.org/message-id/53F5AB0A.5060502@dalibo.com Track number of files ready to be archived in pg_stat_archiver]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow automatic selection of SSL client certificates from a certificate store&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg00406.php &amp;lt;nowiki&amp;gt;Allow multiple certificates or keys in the postgresql.crt/.key files&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Point-In-Time Recovery (PITR) ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow archive_mode to be changed without server restart?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01655.php &amp;lt;nowiki&amp;gt;Enabling archive_mode without restart&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Standby server mode ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow pg_xlogfile_name() to be used in recovery mode&lt;br /&gt;
* [http://archives.postgresql.org/message-id/3f0b79eb1001190135vd9f62f1sa7868abc1ea61d12@mail.gmail.com &amp;lt;nowiki&amp;gt;Streaming replication and pg_xlogfile_name()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Prevent variables inherited from the server environment from being used for making streaming replication connections&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01011.php &amp;lt;nowiki&amp;gt;Re: Parameter name standby_mode&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Change walsender so that it applies per-role settings&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg00642.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix data types where equality comparison is not intuitive, e.g. box&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-10/msg01643.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for public SYNONYMs&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-03/msg00519.php &amp;lt;nowiki&amp;gt;Proposal for SYNONYMS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg02043.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-general/2010-12/msg00139.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a special data type for regular expressions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg01067.php &amp;lt;nowiki&amp;gt;Why is there a tsquery data type?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow deleting enumerated values from an existing enumerated data type&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAO%3D2mx6uvgPaPDf-rHqG8%3D1MZnGyVDMQeh8zS4euRyyg4D35OQ@mail.gmail.com Alter or rename enum value]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add overlaps geometric operators that ignore point overlaps&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-03/msg00861.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add IMMUTABLE column attribute&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg00623.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Domains ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow functions defined as casts to domains to be called during casting&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-05/msg00072.php &amp;lt;nowiki&amp;gt;bug? non working casts for domain&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-09/msg01681.php &amp;lt;nowiki&amp;gt;TODO: Fix CREATE CAST on DOMAINs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow values to be cast to domain types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2003-06/msg01206.php &amp;lt;nowiki&amp;gt;Domain casting still doesn&#039;t work right&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00289.php &amp;lt;nowiki&amp;gt;domain casting?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg00812.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make domains work better with polymorphic functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4887.1228700773@sss.pgh.pa.us Polymorphic types vs. domains]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/15535.1238774571@sss.pgh.pa.us some difficulties with fixing it]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Dates and Times ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow infinite intervals just like infinite timestamps&lt;br /&gt;
* https://www.postgresql.org/message-id/4EB095C8.1050703@agliodbs.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow TIMESTAMP WITH TIME ZONE to store the original timezone information, either zone name or offset from UTC&lt;br /&gt;
|If the TIMESTAMP value is stored with a time zone name, interval computations should adjust based on the time zone rules. &lt;br /&gt;
* [https://www.postgresql.org/message-id/Pine.LNX.4.44.0410211300430.2015-100000@zigo.dhs.org &amp;lt;nowiki&amp;gt;timestamp with time zone a la sql99&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have timestamp subtraction not call justify_hours()?&lt;br /&gt;
* [https://www.postgresql.org/message-id/21619.1160067054@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;timestamp subtraction (was Re: formatting intervals with to_char)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow a comma to denote fractional seconds in ISO-8601-compliant times (and timestamps)&lt;br /&gt;
* https://www.postgresql.org/message-id/7D5AC9AB-238D-4FE7-8857-18D98190A4D9@justatheory.com&lt;br /&gt;
* https://www.postgresql.org/message-id/19944.1529810240%40sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Arrays ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow single-byte header storage for array elements}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add function to detect if an array is empty&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00475.php &amp;lt;nowiki&amp;gt;Re: array_length()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of NULLs in arrays&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-11/msg00009.php &amp;lt;nowiki&amp;gt;BUG #4509: array_cat&#039;s null behaviour is inconsistent&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg01040.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== MONEY Data Type ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add locale-aware MONEY type, and support multiple currencies&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2005-08/msg01432.php &amp;lt;nowiki&amp;gt;A real currency type&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01181.php &amp;lt;nowiki&amp;gt;Money type todos?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|MONEY dumps in a locale-specific format making it difficult to restore to a system with a different locale}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Text Search ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dictionaries to change the token that is passed on to later dictionaries&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-11/msg00081.php &amp;lt;nowiki&amp;gt;a tsearch2 (8.2.4) dictionary that only filters out stopwords&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a function-based API for &#039;@@&#039; searches&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00511.php &amp;lt;nowiki&amp;gt;Some recent advances in&lt;br /&gt;
full-text search&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve text search error messages&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg00966.php &amp;lt;nowiki&amp;gt;Poorly designed tsearch NOTICEs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider changing error to warning for strings larger than one megabyte&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-02/msg00190.php &amp;lt;nowiki&amp;gt;BUG #3975: tsearch2 index should not bomb out of 1Mb limit&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|tsearch and tsdicts regression tests fail in Turkish locale on glibc&lt;br /&gt;
* [http://archives.postgresql.org/message-id/49749645.5070801@gmx.net tsearch with Turkish locale]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of dash and plus signs in email address user names, and perhaps improve URL parsing&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg00772.php&lt;br /&gt;
* [http://archives.postgresql.org/message-id/E1Ri8il-0008Ct-9p@wrigleys.postgresql.org tsearch does not recognize all valid emails]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve default parser, to more easily allow adding new tokens&lt;br /&gt;
* http://archives.postgresql.org/message-id/23485.1297727826@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add additional support functions&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00319.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow XML arrays to be cast to other data types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00981.php &amp;lt;nowiki&amp;gt;proposal casting from XML[] to int[], numeric[], text[]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XML Schema validation and xmlvalidate functions (SQL:2008)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add xmlvalidatedtd variant to support validating against a DTD?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Relax-NG validation; libxml2 supports this already}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reliable XML operation non-UTF8 server encodings (xpath(), in particular, is known to not work)&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-01/msg00135.php &amp;lt;nowiki&amp;gt;BUG #4622: xpath only work in utf-8 server encoding&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
* http://archives.postgresql.org/message-id/4110.1238973350@sss.pgh.pa.us}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add functions from SQL:2006: XMLDOCUMENT, XMLCAST, XMLTEXT}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XMLNAMESPACES support in XMLELEMENT and elsewhere}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move XSLT from contrib/xml2 to a more reasonable location&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00539.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Report errors returned by the XSLT library&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00562.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve the XSLT parameter passing API&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00416.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|XML Canonical: Convert XML documents to canonical form to compare them. libxml2 has support for this.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add pretty-printed XML output option&lt;br /&gt;
|Parse a document and serialize it back in some indented form. libxml2 might support this.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XMLQUERY (from the SQL/XML standard)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow XML shredding&lt;br /&gt;
|In some cases shredding could be better option (if there is no need to keep XML docs entirely, e.g. if we have already developed tools that understand only relational data.  This would be a separate module that implements annotated schema decomposition technique, similar to DB2 and SQL Server functionality.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|XPath: Adding the &amp;lt;x&amp;gt; at the root causes problems [http://archives.postgresql.org/pgsql-bugs/2008-05/msg00184.php] [http://archives.postgresql.org/pgsql-bugs/2008-07/msg00054.php] [http://archives.postgresql.org/pgsql-general/2008-07/msg00613.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|xpath_table needs to be implemented/implementable to get rid of contrib/xml2 [http://archives.postgresql.org/pgsql-general/2008-05/msg00823.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|xpath_table is pretty broken anyway [http://archives.postgresql.org/pgsql-hackers/2010-02/msg02424.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|better handling of XPath data types [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00616.php] [http://archives.postgresql.org/message-id/004a01c90e90$4b986d90$e2c948b0$@anstett@iaas.uni-stuttgart.de]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of PIs and DTDs in xmlconcat() [http://archives.postgresql.org/message-id/200904211211.n3LCB09p008988@wwwmaster.postgresql.org]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure XML and /contrib/xml2 functionality&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg02314.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Verify Xpath escaping behavior&lt;br /&gt;
* [http://www.postgresql.org/message-id/E1VOXZv-0008Q9-0Z@wrigleys.postgresql.org Xpath behaviour unintuitive / arguably wrong]&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAAY5AM1L83y79rtOZAUJioREO6n4%3DXAFKcGu6qO3hCZE1yJytg@mail.gmail.com xpath missing entity decoding - bug or feature]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Enforce typmod for function inputs, function results and parameters for spi_prepare&#039;d statements called from PLs&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-01/msg01403.php &amp;lt;nowiki&amp;gt;Re: BUG #2917: spi_prepare doesn&#039;t accept typename aliases&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg01160.php &amp;lt;nowiki&amp;gt;RFC for adding typmods to functions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix IS OF so it matches the ISO specification, and add documentation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2003-08/msg00060.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] IS OF&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00060.php &amp;lt;nowiki&amp;gt;ToDo: add documentation for operator IS OF&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement Boyer-Moore searching in LIKE queries&lt;br /&gt;
* {{messageLink|27645.1220635769@sss.pgh.pa.us|TODO item: Implement Boyer-Moore searching (First time hacker)}}&lt;br /&gt;
* [https://www.postgresql.org/message-id/CALkFZpcbipVJO%3DxVvNQMZ7uLUgHzBn65GdjtBHdeb47QV4XzLw@mail.gmail.com Implement Boyer-Moore searching in LIKE queries]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent malicious functions from being executed with the permissions of unsuspecting users&lt;br /&gt;
|Indexed functions are safe, so VACUUM and ANALYZE are safe too.  Triggers, CHECK and DEFAULT expressions, and rules are still vulnerable. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00268.php &amp;lt;nowiki&amp;gt;Some notes about the index-functions security vulnerability&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce memory usage of aggregates in set returning functions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2008-01/msg00031.php &amp;lt;nowiki&amp;gt;Re: Performance of aggregates over set-returning functions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix /contrib/ltree operator&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-11/msg00044.php &amp;lt;nowiki&amp;gt;BUG #3720: wrong results at using ltree&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix /contrib/btree_gist&#039;s implementation of inet indexing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2010-10/msg00099.php &amp;lt;nowiki&amp;gt;BUG #5705: btree_gist: Index on inet changes query result&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Character Formatting ===&lt;br /&gt;
&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow to_date() and to_timestamp() to accept localized month names}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add missing parameter handling in to_char()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-12/msg00948.php &amp;lt;nowiki&amp;gt;Re: to_char and i18n&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Throw an error from to_char() instead of printing a string of &amp;quot;#&amp;quot; when a number doesn&#039;t fit in the desired output format.&lt;br /&gt;
* discussed in [http://archives.postgresql.org/message-id/37ed240d0907290836w42187222n18664dfcbcb445b1@mail.gmail.com &amp;quot;to_char, support for EEEE format&amp;quot;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix to_number() handling for values not matching the format string&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg01447.php &amp;lt;nowiki&amp;gt;Re: numeric_to_number() function skipping some digits&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Multi-Language Support ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add NCHAR (as distinguished from ordinary varchar)&lt;br /&gt;
* [http://www.postgresql.org/message-id/A756FAD7EDC2E24F8CAB7E2F3B5375E918B12BC0@FALEX03.au.fjanz.com UTF8 national character data type support WIP patch and list of open issues.]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a cares-about-collation column to pg_proc, so that unresolved-collation errors can be thrown at parse time&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-03/msg01520.php &amp;lt;nowiki&amp;gt;Open issues for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Integrate collations with text search configurations&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28887.1303579034@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;Some TODO items for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Integrate collations with to_char() and related functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28887.1303579034@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;Some TODO items for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support collation-sensitive equality and hashing functions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-06/msg00472.php &amp;lt;nowiki&amp;gt; contrib/citext versus collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support multiple simultaneous character sets, per SQL:2008}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve UTF8 combined character handling?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add octet_length_server() and octet_length_client()}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make octet_length_client() the same as octet_length()?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problems with wrong runtime encoding conversion for NLS message files}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix contrib/fuzzystrmatch to work with multibyte encodings&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-04/msg00047.php &amp;lt;nowiki&amp;gt; soundex function returns UTF-16 characters&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg00138.php &amp;lt;nowiki&amp;gt; dmetaphone woes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change memory allocation for multi-byte functions so memory is allocated inside conversion functions&lt;br /&gt;
|Currently we preallocate memory based on worst-case usage.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ability to use case-insensitive regular expressions on multi-byte characters&lt;br /&gt;
|Currently it works for UTF-8, but not other multi-byte encodings&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00433.php &amp;lt;nowiki&amp;gt;Regexps vs. locale&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* {{MessageLink|20091201210024.B1393753FB7@cvs.postgresql.org|A partial solution for UTF-8}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve encoding of connection startup messages sent to the client&lt;br /&gt;
|Currently some authentication error messages are sent in the server encoding&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-12/msg00801.php &amp;lt;nowiki&amp;gt;encoding of PostgreSQL messages&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://www.postgresql.org/message-id/20131220030725.GA1411150@tornado.leadboat.com multibyte messages are displayed incorrectly on the client]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Windows: Cache MessageEncoding conversion for use outside transactions&lt;br /&gt;
* http://www.postgresql.org/message-id/20150812055719.GA1945333@tornado.leadboat.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|More sensible support for Unicode combining characters, normal forms&lt;br /&gt;
* http://archives.postgresql.org/message-id/200904141532.44618.peter_e@gmx.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Views and Rules ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow VIEW/RULE recompilation when the underlying tables change&lt;br /&gt;
|This is both difficult and controversial.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg01723.php Re: About &amp;quot;Allow VIEW/RULE recompilation when the underlying tables change&amp;quot;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg01724.php Re: About &amp;quot;Allow VIEW/RULE recompilation when the underlying tables change2&amp;quot;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CACk%3DU9NFSzWrEba8G5dZ%3DTZLy3_hx3QXGyCcKVWT%3D4iA1FjMuA@mail.gmail.com VIEW still referring to old name of field]&lt;br /&gt;
* [http://www.postgresql.org/message-id/87mwe4k46y.fsf@commandprompt.com Re-create dependent views on ALTER TABLE ALTER COLUMN ... TYPE?]&lt;br /&gt;
}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make it possible to use RETURNING together with conditional DO INSTEAD rules, such as for partitioning setups&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00577.php &amp;lt;nowiki&amp;gt;RETURNING and DO INSTEAD ... Intentional or not?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve ability to modify views via ALTER TABLE&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00691.php &amp;lt;nowiki&amp;gt;Re: idea: storing view source in system catalogs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg01410.php &amp;lt;nowiki&amp;gt;modifying views&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-08/msg00300.php &amp;lt;nowiki&amp;gt;Re: patch: Add columns via CREATE OR REPLACE VIEW&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow ALTER INDEX ... RENAME concurrently&lt;br /&gt;
* [https://www.postgresql.org/message-id/1531767486.432607658@f357.i.mail.ru Alter index rename concurrently to]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SQL Commands ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT&lt;br /&gt;
* [http://web.archive.org/web/20161019182747/dissipatedheat.com/2011/11/10/how-not-to-write-a-patch-for-postgresql/ How not to write this patch.]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve type determination of unknown (NULL or quoted literal) result columns for UNION/INTERSECT/EXCEPT&lt;br /&gt;
* [http://archives.postgresql.org/message-id/9799.1302719551@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;UNION construct type cast gives poor error message&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow prepared transactions with temporary tables created and dropped in the same transaction, and when an ON COMMIT DELETE ROWS temporary table is accessed&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00047.php &amp;lt;nowiki&amp;gt;Re: &amp;amp;quot;could not open relation 1663/16384/16584: No such file or directory&amp;amp;quot; in a specific combination of transactions with temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/492543D5.9050904@enterprisedb.com A suggestion on how to implement this]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a GUC variable to warn about non-standard SQL usage in queries}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add NOVICE output level for helpful messages&lt;br /&gt;
|For example, have it warn about unjoined tables.  This could also control automatic sequence/index creation messages.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SQL-standard MERGE command&lt;br /&gt;
|MERGE is typically used to merge two tables, for data warehousing type use cases.&lt;br /&gt;
* PostgreSQL has an &amp;quot;UPSERT&amp;quot; command as of version 9.5, with the addition of &amp;quot;ON CONFLICT DO UPDATE&amp;quot;. SQL MERGE is independently useful, though.&lt;br /&gt;
* A patch for this that made it into Postgres 11 was reverted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow NOTIFY in rules involving conditionals}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow LISTEN on patterns&lt;br /&gt;
* http://www.postgresql.org/message-id/52693FC5.7070507@gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Simplify dropping roles that have objects in several databases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for WITH RECURSIVE ... CYCLE&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00291.php &amp;lt;nowiki&amp;gt;WITH RECURSIVE ... CYCLE in vanilla SQL: issues with arrays of rows&amp;lt;/nowiki&amp;gt;]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add DEFAULT .. AS OWNER so permission checks are done as the table owner&lt;br /&gt;
|This would be useful for SERIAL nextval() calls and CHECK constraints.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow DISTINCT to work in multiple-argument aggregate calls}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add comments on system tables/columns using the information in catalogs.sgml&lt;br /&gt;
|Ideally the information would be pulled from the SGML file automatically.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent the specification of conflicting transaction read/write options&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00684.php &amp;lt;nowiki&amp;gt;Re: SET TRANSACTION and SQL Standard&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow DELETE and UPDATE to be used with LIMIT and ORDER BY&lt;br /&gt;
* http://archives.postgresql.org/pgadmin-hackers/2010-04/msg00078.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg01997.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow PREPARE of cursors}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have DISCARD PLANS discard plans cached by functions&lt;br /&gt;
|DISCARD ALL should do the same.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg00431.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid multiple-evaluation of BETWEEN and IN arguments containing volatile expressions&lt;br /&gt;
* http://archives.postgresql.org/message-id/4D95B605.2020709@enterprisedb.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CREATE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow CREATE TABLE AS to determine column lengths for complex expressions like SELECT col1 || col2}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have WITH CONSTRAINTS also create constraint indexes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-04/msg00149.php &amp;lt;nowiki&amp;gt;Re: CREATE TABLE LIKE INCLUDING INDEXES support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move NOT NULL constraint information to pg_constraint&lt;br /&gt;
|Currently NOT NULL constraints are stored in pg_attribute without any designation of their origins, e.g. primary keys.  One manifest problem is that dropping a PRIMARY KEY constraint does not remove the NOT NULL constraint designation.  Another issue is that we should probably force NOT NULL to be propagated from parent tables to children, just as CHECK constraints are.  (But then does dropping PRIMARY KEY affect children?)&lt;br /&gt;
* http://archives.postgresql.org/message-id/19768.1238680878@sss.pgh.pa.us&lt;br /&gt;
* http://archives.postgresql.org/message-id/200909181005.n8IA5Ris061239@wwwmaster.postgresql.org&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg01223.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg00358.php&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAB7nPqTPXgX9HiyhhtAgpW7jbA1iskMCSoqXPEEB_KYXYy1E1Q@mail.gmail.com Prevent ALTER TABLE DROP NOT NULL on child tables if parent column has it]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent concurrent CREATE TABLE from sometimes returning a cryptic error message&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-10/msg00169.php &amp;lt;nowiki&amp;gt;BUG #3692: Conflicting create table statements throw unexpected error&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add CREATE SCHEMA ... LIKE that copies a schema}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix CREATE OR REPLACE FUNCTION to not leave objects depending on the function in inconsistent state&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-08/msg00985.php indexes on functions and create or replace function]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow temporary tables to exist as empty by default in all sessions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00006.php &amp;lt;nowiki&amp;gt;what is difference between LOCAL and GLOBAL TEMP TABLES in PostgreSQL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg01329.php &amp;lt;nowiki&amp;gt;idea: global temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org//pgsql-hackers/2009-05/msg00016.php &amp;lt;nowiki&amp;gt;Re: idea: global temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg01098.php &amp;lt;nowiki&amp;gt;global temporary tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-04/msg01148.php Temporary tables under hot standby]&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAFj8pRC2h6qhHsFbcE7b_7SagiS6o%3D5J2UvCwCb05Ka1XFv_Ng@mail.gmail.com Implementation of global temporary tables?]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow the creation of &amp;quot;distinct&amp;quot; types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01647.php &amp;lt;nowiki&amp;gt;Distinct types&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider analyzing temporary tables when they are first used in a query&lt;br /&gt;
|Autovacuum cannot analyze or vacuum temporary tables.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg00416.php &amp;lt;nowiki&amp;gt;autovacuum and temp tables support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== UPDATE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Research self-referential UPDATEs that see inconsistent row versions in read-committed mode&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00507.php &amp;lt;nowiki&amp;gt;Concurrently updating an updatable view&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve performance of EvalPlanQual mechanism that rechecks already-updated rows&lt;br /&gt;
|This is related to the previous item, which questions whether it even has the right semantics&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-09/msg00045.php &amp;lt;nowiki&amp;gt;BUG #4401: concurrent updates to a table blocks one update indefinitely&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-07/msg00302.php &amp;lt;nowiki&amp;gt;BUG #4945: Parallel update(s) gone wild&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ALTER ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have ALTER TABLE RENAME of a SERIAL column rename the sequence&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php &amp;lt;nowiki&amp;gt;Re: newbie: renaming sequences task&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CADLWmXUV4LbLhMZL8rYMhCy72aZZLB5BSARPQVgoX0BrxA0FFg@mail.gmail.com renaming implicit sequences]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ALTER DOMAIN to modify the underlying data type}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow ALTER TABLESPACE to move the tablespace to different directories}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow moving system tables to other tablespaces, where possible&lt;br /&gt;
|Currently non-global system tables must be in the default database tablespace. Global system tables can never be moved.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have ALTER INDEX update the name of a constraint using that index}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow column display reordering by recording a display, storage, and permanent id for every column?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00782.php &amp;lt;nowiki&amp;gt;Re: column ordering, was Re: [PATCHES] Enums patch v2&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg01029.php &amp;lt;nowiki&amp;gt;Column reordering in pg_dump&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/message-id/1324412114-sup-9608@alvh.no-ip.org&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAApHDvqhnuznxd4xVMFDcGn+nHVYyUtJ-TvbRsOuR%3DPaVbbGqw@mail.gmail.com logical column order and physical column order]&lt;br /&gt;
* [http://www.postgresql.org/message-id/20141209174146.GP1768@alvh.no-ip.org logical column ordering]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow deactivating (and reactivating) indexes via ALTER TABLE&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg01191.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ALTER OPERATOR ... RENAME&lt;br /&gt;
|needs to consider effects of changing operator precedence&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1322948781.26266.9.camel@vanquo.pezone.net Missing rename support]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== CLUSTER ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Automatically maintain clustering on a table&lt;br /&gt;
|This might require some background daemon to maintain clustering during periods of low usage. It might also require tables to be only partially filled for easier reorganization.  Another idea would be to create a merged heap/index data file so an index lookup would automatically access the heap data too.  A third idea would be to store heap rows in hashed groups, perhaps using a user-supplied hash function.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2004-08/msg00350.php &amp;lt;nowiki&amp;gt;Equivalent praxis to CLUSTERED INDEX?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00155.php &amp;lt;nowiki&amp;gt;Re: Grouped Index Tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://community.enterprisedb.com/git/&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-10/msg00346.php &amp;lt;nowiki&amp;gt;Re: maintain_cluster_order_v5.patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow CLUSTER to be used on partial indexes&lt;br /&gt;
* http://www.postgresql.org/message-id/CAMkU%3D1zYwoHHsqJ8wfK3GdG_t_a6t4RK-GFDSKymQ0EGP%3DtypA@mail.gmail.com&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY to report error lines and continue&lt;br /&gt;
|This requires the use of a savepoint before each COPY line is processed, with ROLLBACK on COPY failure. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00572.php &amp;lt;nowiki&amp;gt;Re: VLDB Features&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY to report errors sooner&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg01169.php &amp;lt;nowiki&amp;gt;Timely reporting of COPY errors&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY FROM to create index entries in bulk&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00811.php &amp;lt;nowiki&amp;gt;Batch update of indexes on data loading&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve COPY performance&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00954.php &amp;lt;nowiki&amp;gt;Re: 8.3 / 8.2.6 restore comparison&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01882.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow a stalled COPY to exit if the backend is terminated&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-04/msg00067.php &amp;lt;nowiki&amp;gt;Re: possible bug not in open items&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY &amp;quot;text&amp;quot; format to output a header&lt;br /&gt;
* [http://www.postgresql.org/message-id/CACfv+pJ31tesLvncJyP24quo8AE+M0GP6p6MEpwPv6yV8%3DsVHQ@mail.gmail.com Why doesn&#039;t COPY support the HEADER options for tab-separated output?]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have COPY FREEZE set PD_ALL_VISIBLE&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAMkU%3D1w3osJJ2FneELhhNRLxfZitDgp9FPHee08NT2FQFmz_pQ@mail.gmail.com items]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== GRANT/REVOKE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dropping of a role that has connection rights&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00736.php &amp;lt;nowiki&amp;gt;DROP ROLE dependency tracking ...&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== DECLARE CURSOR ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent DROP TABLE from dropping a table referenced by its own open cursor?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide some guarantees about the behavior of cursors that invoke volatile functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20997.1244563664@sss.pgh.pa.us Re: Cursor with hold emits the same row more than once across commits in 8.3.7]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== SHOW/SET ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rationalize the discrepancy between settings that use values in bytes and SHOW that returns the object count&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-docs/2008-07/msg00007.php &amp;lt;nowiki&amp;gt;Re: [ADMIN] shared_buffers and shmmax&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ANALYZE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve how ANALYZE computes in-doubt tuples&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00771.php &amp;lt;nowiki&amp;gt;VACUUM/ANALYZE counting of in-doubt tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove quadratic time in statistics sender when analyzing many tables&lt;br /&gt;
* [http://www.postgresql.org/message-id/flat/CAMkU%3D1wLjAsmJNuB6ZObZmGHqi9jLbK6n1eSgnOc5J1-AUsvUA@mail.gmail.com Thousands of schemas and ANALYZE goes out of memory]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce memory use when analyzing many tables in a single command by making catcache and syscache flushable or bounded.&lt;br /&gt;
* [http://www.postgresql.org/message-id/flat/CAMkU%3D1yZnAYvMHENt8%3D9pgwE8q5zmX+mG%3DSXbFHiLkq_qn0B7Q@mail.gmail.com Thousands of schemas and ANALYZE goes out of memory]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== EXPLAIN ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have EXPLAIN ANALYZE issue NOTICE messages when the estimated and actual row counts differ by a specified percentage}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have EXPLAIN ANALYZE report rows as floating-point numbers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg01363.php &amp;lt;nowiki&amp;gt;explain analyze rows=%.0f&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg00108.php &amp;lt;nowiki&amp;gt;Re: explain analyze rows=%.0f&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have EXPLAIN ANALYZE report buckets and memory usage for HashAggregate&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/2527f5cb-5992-ae66-f3ec-4aa2396065ec%402ndquadrant.com &amp;lt;nowiki&amp;gt;to-do item for explain analyze of hash aggregates? &amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Window Functions ===&lt;br /&gt;
See {{messageLink|357.1230492361@sss.pgh.pa.us|TODO items for window functions}}.&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support creation of user-defined window functions&lt;br /&gt;
|We have the ability to create new window functions written in C.  Is it&lt;br /&gt;
worth the effort to create an API that would let them be written in PL/pgsql, etc?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement full support for window framing clauses&lt;br /&gt;
|In addition to done clauses described in the [http://developer.postgresql.org/pgdocs/postgres/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS latest doc], these clauses are not implemented yet.&lt;br /&gt;
* RANGE BETWEEN ... PRECEDING/FOLLOWING&lt;br /&gt;
* EXCLUDE&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Investigate tuplestore performance issues&lt;br /&gt;
|The tuplestore_in_memory() thing is just a band-aid, we ought to try to solve it properly.  tuplestore_advance seems like a weak spot as well.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00152.php &amp;lt;nowiki&amp;gt;tuplestore potential performance problem&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem|Do we really need so much duplicated code between Agg and WindowAgg?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Teach planner to evaluate multiple windows in the optimal order&lt;br /&gt;
|Currently windows are always evaluated in the query-specified order.&lt;br /&gt;
* http://archives.postgresql.org/message-id/3CDAD71E9D70417290FCF66F0178D1E1@amd64&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement DISTINCT clause in window aggregates&lt;br /&gt;
|Some proprietary RDBMSs have implemented it already, so it helps with porting from those.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Integrity Constraints ==&lt;br /&gt;
=== Keys ===&lt;br /&gt;
&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve deferrable unique constraints for cases with many conflicts&lt;br /&gt;
|The current implementation fires a trigger for each potentially conflicting row.  This might not scale well for an update that changes many key values at once.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Referential Integrity ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add MATCH PARTIAL referential integrity}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change foreign key constraint for array -&amp;amp;gt; element to mean element in array?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-10/msg01814.php &amp;lt;nowiki&amp;gt;foreign keys for array/period contains relationships&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem when cascading referential triggers make changes on cascaded tables, seeing the tables in an intermediate state&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Work-in-progress referential action trigger timing&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Are ri_KeysEqual checks in the RI enforcement triggers still necessary?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2005-10/msg00458.php &amp;lt;nowiki&amp;gt;Re: Effects of cascading references in foreign keys&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Check Constraints ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Run check constraints only when affected columns are changed&lt;br /&gt;
* http://archives.postgresql.org/message-id/1326055327.15293.13.camel@vanquo.pezone.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Do not scan the table when a check constraint is added in the same command that adds the column&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAMkU%3D1z5vXZ8Txd9_8hvNFovtbGuP4VTitFRN59XDncEHVGtJA@mail.gmail.com skip table scan for adding column with provable check constraints]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Server-Side Languages ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for polymorphic arguments and return types to languages other than PL/PgSQL}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for OUT and INOUT parameters to languages other than PL/PgSQL}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add more fine-grained specification of functions taking arbitrary data types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00367.php &amp;lt;nowiki&amp;gt;RfD: more powerful &amp;amp;quot;any&amp;amp;quot; types&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow holdable cursors in SPI}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rethink query plan caching and timing of parse analysis within SQL-language functions&lt;br /&gt;
|They should work more like plpgsql functions do ...&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-05/msg00078.php &amp;lt;nowiki&amp;gt;Re: BUG #6019: invalid cached plan on inherited table&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow regex operations in PL/Perl using UTF8 characters in non-UTF8 encoded databases}}&lt;br /&gt;
&lt;br /&gt;
=== PL/pgSQL ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow handling of %TYPE arrays, e.g. tab.col%TYPE[]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Allow listing of record column names, and access to record columns via variables, e.g. columns := r.(*), tval2 := r.(colname)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php &amp;lt;nowiki&amp;gt;Re: PL/PGSQL: Dynamic Record Introspection&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://pgxn.org/dist/colnames/ &amp;lt;nowiki&amp;gt;colnames: Extension to retrieve column names from a record&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow row and record variables to be set to NULL constants, and allow NULL tests on such variables&lt;br /&gt;
|Because a row is not scalar, do not allow assignment from NULL-valued scalars.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg00070.php &amp;lt;nowiki&amp;gt;NULL and plpgsql rows&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider keeping separate cached copies when search_path changes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg01009.php &amp;lt;nowiki&amp;gt;pl/pgsql Plan Invalidation and search_path&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of NULL row values vs. NULL rows&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-09/msg01758.php &amp;lt;nowiki&amp;gt;Null row vs. row of nulls in plpgsql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg01973.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve PERFORM handling of WITH queries or document limitation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-03/msg00309.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== PL/Python ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create a new restricted execution class that will allow passing function arguments in as locals.  Passing them as globals means functions cannot be called recursively.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-02/msg01468.php &amp;lt;nowiki&amp;gt;Re: pl/python do not delete function arguments&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a DB-API compliant interface on top of the SPI interface&lt;br /&gt;
* http://petereisentraut.blogspot.com/2011/11/plpydbapi-db-api-for-plpython.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|For functions returning a setof record with a composite type, cache the I/O functions for the composite type&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg02007.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Clients ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Split out pg_resetxlog output into pre- and post-sections&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg02040.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve pg_rewind&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAN-RpxDhc_8JOq%3DcT9vd6MqWQaS0ZtvSf2LFV1V+bjOoEz02ow@mail.gmail.com Proposal: pg_rewind to skip config files]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== psql ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move psql backslash database information into the backend, use mnemonic commands?&lt;br /&gt;
|This would allow non-psql clients to pull the same information out of the database as psql. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-01/msg00191.php &amp;lt;nowiki&amp;gt;Re: psql \d option list overloaded&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make psql&#039;s \d commands distinguish default privileges from no privileges&lt;br /&gt;
|ACL displays were visibly different for the two cases before we &amp;quot;improved&amp;quot; them by using array_to_string.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-05/msg00082.php &amp;lt;nowiki&amp;gt;BUG #6021: There is no difference between default and empty access privileges with \dp&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consistently display privilege information for all objects in psql}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a \set variable to control whether \s displays line numbers&lt;br /&gt;
|Another option is to add \# which lists line numbers, and allows command execution.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php &amp;lt;nowiki&amp;gt;Re: psql possible TODO&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Include the symbolic SQLSTATE name in verbose error reports&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-09/msg00438.php &amp;lt;nowiki&amp;gt;Re: Checking is TSearch2 query is valid&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add option to wrap column values at whitespace boundaries, rather than chopping them at a fixed width.&lt;br /&gt;
|Currently, &amp;amp;quot;wrapped&amp;amp;quot; format chops values into fixed widths.  Perhaps the word wrapping could use the same algorithm documented in the W3C specification. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00404.php &amp;lt;nowiki&amp;gt;Re: psql wrapped format default for backslash-d commands&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://www.w3.org/TR/CSS21/tables.html#auto-table-layout}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add option to print advice for people familiar with other databases&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01845.php &amp;lt;nowiki&amp;gt;MySQL-ism help patch for psql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix FETCH_COUNT to handle SELECT ... INTO and WITH queries&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg01565.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-05/msg00192.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent psql from sending remaining single-line multi-statement queries after reconnecting&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-05/msg00159.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg01283.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve line drawing characters&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00386.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider improving the continuation prompt&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg01772.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve speed of tab completion by using LIKE&lt;br /&gt;
* http://www.postgresql.org/message-id/20120821174847.GL1267@tamriel.snowman.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== pg_dump / pg_restore ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Dump security labels and comments on databases in a way that allows to load a dump into a differently named database&lt;br /&gt;
* [http://www.postgresql.org/message-id/20150710115735.GH26521@alap3.anarazel.de security labels on databases are bad for dump &amp;amp; restore]&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Add full object name to the tag field.  eg. for operators we need &#039;=(integer, integer)&#039;, instead of just &#039;=&#039;.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid using platform-dependent names for locales in pg_dumpall output&lt;br /&gt;
|Using native locale names puts roadblocks in the way of porting a dump to another platform.  One possible solution is to get&lt;br /&gt;
CREATE DATABASE to accept some agreed-on set of locale names and fix them up to meet the platform&#039;s requirements.&lt;br /&gt;
* http://archives.postgresql.org/message-id/21396.1241716688@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|In a selective dump, allow dumping of an object and all its dependencies}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Stop dumping CASCADE on DROP TYPE commands in clean mode}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow pg_restore to load different parts of the COPY data for a single table simultaneously}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Preserve sparse storage of large objects over dump/restore&lt;br /&gt;
* [http://archives.postgresql.org/message-id/18789.1349750451@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;TODO item: teach pg_dump about sparsely-stored large objects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent PL/pgSQL comment from throwing an error in a non-superuser restore&lt;br /&gt;
* [http://www.postgresql.org/message-id/E1VuYH7-0008Rz-SV@wrigleys.postgresql.org Reloading dump fails at COMMENT ON EXTENSION plpgsql]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Delay REFRESH MATERIALIZED VIEW until dependent indexes are created&lt;br /&gt;
* [http://www.postgresql.org/message-id/20140820021530.2534.43156@wrigleys.postgresql.org pg_restore unusable for expensive matviews]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== pg_upgrade ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Handle large object comments&lt;br /&gt;
|This is difficult to do because the large object doesn&#039;t exist when --schema-only is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using pg_depend for checking object usage in version.c&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Migrate pg_statistic by dumping it out as a flat file, so analyze is not necessary&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CAAZKuFaWdLkK8eozSAooZBets9y_mfo2HS6urPAKXEPbd-JLCA@mail.gmail.com pg_upgrade and statistics]&lt;br /&gt;
* [https://www.postgresql.org/message-id/20171205140135.GA25023%40momjian.us Speeding up pg_upgrade]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Find cleaner way to start/stop dedicated servers for upgrades&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00275.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Desired changes that would prevent upgrades with pg_upgrade&lt;br /&gt;
* 32-bit page checksums&lt;br /&gt;
* Add metapage to GiST indexes&lt;br /&gt;
* Clean up hstore&#039;s internal representation&lt;br /&gt;
* Remove tuple infomask bit HEAP_MOVED_OFF and HEAP_MOVED_IN&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAK+WP1xdmyswEehMuetNztM4H199Z1w9KWRHVMKzyyFM+hV%3DzA@mail.gmail.com fix char() index trailing space handling]&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAPpHfdtxXMjyZxwND09ZLBBACVbWb5J9bLUf67CndR4VKFDgwg@mail.gmail.com Use non-collation-aware comparisons for GIN opclasses]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ecpg ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Docs&lt;br /&gt;
|Document differences between ecpg and the SQL standard and information about the Informix-compatibility module.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Solve cardinality &amp;amp;gt; 1 for input descriptors / variables?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a semantic check level, e.g. check if a table exists}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|fix handling of DB attributes that are arrays}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix nested C comments}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|sqlwarn[6] should be &#039;W&#039; if the PRECISION or SCALE value specified}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make SET CONNECTION thread-aware, non-standard?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multidimensional arrays}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement COPY FROM STDIN}} &lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a way to specify size of a bytea parameter&lt;br /&gt;
* [http://archives.postgresql.org/message-id/200906192131.n5JLVoMo044178@wwwmaster.postgresql.org &amp;lt;nowiki&amp;gt;BUG #4866: ECPG and BYTEA&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Fix small memory leaks in ecpg&lt;br /&gt;
|Memory leaks in a short running application like ecpg are not really a problem, but make debugging more complicated}} &lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reuse of cursor name variables&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20100329113435.GA3430@feivel.credativ.lan &amp;lt;nowiki&amp;gt;Problems with variable cursorname in ecpg&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== libpq ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add PQexecf() that allows complex parameter substitution&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01803.php &amp;lt;nowiki&amp;gt;Last minute mini-proposal (I know, know) for PQexecf()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SQLSTATE and severity to errors generated within libpq itself&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-interfaces/2007-11/msg00015.php &amp;lt;nowiki&amp;gt;v8.1: Error severity on libpq PGconn*&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01425.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for interface/ipaddress binding to libpq&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01811.php &amp;lt;nowiki&amp;gt;SR/libpq - outbound interface/ipaddress binding&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|When receiving a FATAL error remember it, so that it doesn&#039;t profess ingnorance about why the session was closed&lt;br /&gt;
* [http://www.postgresql.org/message-id/CA+TgmoZ4P1cQetjOxQoHiG072UcE7dpE7dTBV8hMOidhwhof+g@mail.gmail.com&amp;lt;nowiki&amp;gt;Idle In Transaction Session Timeout, revived&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Pipelining support for libpq async API and an array-valued PQexecPrepared that uses it&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAMsr+YHE8Rt800yWcHEL8SrgruK0ng_nBmtKV6YMZ2BAzRBZzw@mail.gmail.com Foreign table batched inserts]&lt;br /&gt;
}}&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Triggers ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve storage of deferred trigger queue&lt;br /&gt;
|Right now all deferred trigger information is stored in backend memory.  This could exhaust memory for very large trigger queues. This item involves dumping large queues into files, or doing some kind of join to process all the triggers, some bulk operation, or a bitmap. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00876.php &amp;lt;nowiki&amp;gt;Re: BUG #4204: COPY to table with FK has memory leak&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-10/msg00464.php &amp;lt;nowiki&amp;gt;Scaling up deferred unique checks and the after trigger queue&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-08/msg00023.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow triggers to be disabled in only the current session.&lt;br /&gt;
|This is currently possible by starting a multi-statement transaction, modifying the system tables, performing the desired SQL, restoring the system tables, and committing the transaction.  ALTER TABLE ... TRIGGER requires a table lock so it is not ideal for this usage.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY&lt;br /&gt;
|If the dump is known to be valid, allow foreign keys to be added without revalidating the data.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|When statement-level triggers are defined on a parent table, have them fire only on the parent table, and fire child table triggers only where appropriate&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg01883.php &amp;lt;nowiki&amp;gt;Statement-level triggers and inheritance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Tighten trigger permission checks&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00564.php &amp;lt;nowiki&amp;gt;Security leak with trigger functions?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow BEFORE INSERT triggers on views&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-02/msg01466.php &amp;lt;nowiki&amp;gt;Re: Why can&#039;t I put a BEFORE EACH ROW trigger on a view?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add database and transaction-level triggers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00451.php &amp;lt;nowiki&amp;gt;Proposal for db level triggers&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00620.php &amp;lt;nowiki&amp;gt;triggers on prepare, commit, rollback... ?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid requirement for AFTER trigger functions to return a value&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg02384.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow creation of inline triggers&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-02/msg00708.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Inheritance ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow unique indexes across inherited tables (requires multi-table indexes)&lt;br /&gt;
* Postgres 11 allows unique indexes across partitions if the partition key is part of the index.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Research whether ALTER TABLE / SET SCHEMA should work on inheritance hierarchies (and thus support ONLY)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|ALTER TABLE variants sometimes support recursion and sometimes not, but this is poorly/not documented, and the ONLY marker would then be silently ignored. Clarify the documentation, and reject ONLY if it is not supported.}}&lt;br /&gt;
&lt;br /&gt;
== Indexes ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent index uniqueness checks when UPDATE does not modify the column&lt;br /&gt;
|Uniqueness (index) checks are done when updating a column even if the column is not modified by the UPDATE.&lt;br /&gt;
However, HOT already short-circuits this in common cases, so more work might not be helpful.&lt;br /&gt;
* http://www.postgresql.org/message-id/CA+TgmoZOyaTanfEvNUdiHBCuu9Zh0JVP1e_UTVbx6Rvj9vFC9Q@mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having a larger statistics target for indexed columns and expression indexes. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multiple indexes to be created concurrently, ideally via a single heap scan&lt;br /&gt;
|pg_restore allows parallel index builds, but it is done via subprocesses, and there is no SQL interface for this.&lt;br /&gt;
Cluster could definitely benefit from this.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00093.php&lt;br /&gt;
* http://www.postgresql.org/message-id/CADVWZZJ5AS%3DXVrDwfTQqQP_V1+_fTYcZhq%3Dd5CbCXoALCjObbg@mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider sorting entries before inserting into btree index&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-01/msg01010.php &amp;lt;nowiki&amp;gt;Re: ATTN: Clodaldo was Performance problem. Could it be related to 8.3-beta4?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using &amp;quot;effective_io_concurrency&amp;quot; for index scans&lt;br /&gt;
|Currently only bitmap scans use this, which might be fine because most multi-row index scans use bitmap scans.&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAGTBQpZzf70n0PYJ%3DVQLd+jb3wJGo%3D2TXmY+SkJD6G_vjC5QNg@mail.gmail.com Prefetch index pages for B-Tree index scans]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow GIN indexes to be used for exclusion constraints&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-05/msg00669.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow &amp;quot;loose&amp;quot; or &amp;quot;skip&amp;quot; scans on btree indexes in which the first column has low cardinality&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2012-08/msg00159.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Make the planner&#039;s &amp;quot;special index operator&amp;quot; mechanism extensible&lt;br /&gt;
* http://www.postgresql.org/message-id/27270.1364700924@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow index-only COUNT(*) for indexes which don&#039;t support index-only scans&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve GIN performance&lt;br /&gt;
* [http://www.postgresql.org/message-id/52F373CC.4050800@vmware.com Small GIN optimizations (after 9.4)]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Teach GIN cost estimation about &amp;quot;fast scans&amp;quot;&lt;br /&gt;
* http://www.postgresql.org/message-id/53208B4D.5000806@vmware.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow unlogged indexes&lt;br /&gt;
* http://www.postgresql.org/message-id/11561.1414793261@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GIST ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add more GIST index support for geometric data types}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow GIST indexes to create more complex index types, like digital trees (see Aoki)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix performance issues in contrib/seg and contrib/cube GiST support&lt;br /&gt;
* [http://archives.postgresql.org/message-id/alpine.DEB.2.00.0904161633160.4053@aragorn.flymine.org GiST index performance]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/alpine.DEB.2.00.0904221704470.22330@aragorn.flymine.org draft patch]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-05/msg00069.php &amp;lt;nowiki&amp;gt;Re: GiST index performance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-06/msg00068.php &amp;lt;nowiki&amp;gt;GiST index performance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|[http://archives.postgresql.org/message-id/4DC8D284-05CF-4E3D-9670-AC9A32C37A36@justatheory.com GiST index support for arrays]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Hash ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add UNIQUE capability to hash indexes&lt;br /&gt;
* [https://www.postgresql.org/message-id/592254A5.9000809@anastigmatix.net Re: PG10 Crash-safe and replicable Hash Indexes and UNIQUE]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multi-column hash indexes&lt;br /&gt;
* This requires all columns to be specified for a query to use the index.&lt;br /&gt;
* [https://www.postgresql.org/message-id/CA+Tgmoax6DhnKsuE_gzY5qkvmPEok77JAP1h8wOTbf+dg2Ycrw@mail.gmail.com Write Ahead Logging for Hash Indexes]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Sorting ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider whether duplicate keys should be sorted by block/offset&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00558.php &amp;lt;nowiki&amp;gt;Remove hacks for old bad qsort() implementations?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider being smarter about memory and external files used during sorts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg01101.php &amp;lt;nowiki&amp;gt;Sorting Improvements for 8.4&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider detoasting keys before sorting}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow sorts of skinny tuples to use even more available memory.&lt;br /&gt;
|Now that it is not limited by MaxAllocSize, don&#039;t limit by INT_MAX either.&lt;br /&gt;
* [http://www.postgresql.org/message-id/CA+U5nMKkRMin1pV8VMpS6_n7hcOWSG0kZS3oFL9JOa8DV6vJyQ@mail.gmail.com Re: MemoryContextAllocHuge(): selectively bypassing MaxAllocSize]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Cache Usage ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider automatic caching of statements at various levels:&lt;br /&gt;
* Parsed query tree&lt;br /&gt;
* Query execute plan&lt;br /&gt;
* Query results &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg00823.php &amp;lt;nowiki&amp;gt;Cached Query Plans (was: global prepared statements)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAFj8pRAGLaiEm8ur5DWEBo7qHRWTk9HxkuUAz00CZZtJj-LkCA%40mail.gmail.com PoC plpgsql - possibility to force custom or generic plan]&lt;br /&gt;
* [https://www.postgresql.org/message-id/CADT4RqAd_74m6MUbXAPsYzqXG3F6wWVhS_dFJijrfXs7N+QGHQ@mail.gmail.com Cached/global query plans, autopreparation]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider allowing higher priority queries to have referenced shared buffer pages stay in memory longer&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00562.php &amp;lt;nowiki&amp;gt;Re: How to keep a table in memory?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix memory leak caused by negative catcache entries&lt;br /&gt;
* [http://www.postgresql.org/message-id/51C0A1FF.2050404@vmware.com &amp;lt;nowiki&amp;gt;Re: Memory leak in PL/pgSQL function which CREATE/SELECT/DROP a temporary table&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Vacuum ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Auto-fill the free space map by scanning the buffer cache or by checking pages written by the background writer&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-02/msg01125.php &amp;lt;nowiki&amp;gt;Dead Space Map&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-03/msg00011.php &amp;lt;nowiki&amp;gt;Re: Automatic free space map filling&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow concurrent inserts to use recently created pages rather than creating new ones&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg00853.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having single-page pruning update the visibility map&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;https://commitfest.postgresql.org/action/patch_view?id=75&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg02344.php &amp;lt;nowiki&amp;gt;Re: visibility maps and heap_prune&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow VACUUM FULL and CLUSTER to update the visibility map&lt;br /&gt;
* [http://www.postgresql.org/message-id/20130112191404.255800@gmx.com index-only scans : abnormal heap fetches after VACUUM FULL]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve tracking of total relation tuple counts now that vacuum doesn&#039;t always scan the whole heap&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg00531.php Partial vacuum versus pg_class.reltuples]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Bias FSM towards returning free space near the beginning of the heap file, in hopes that empty pages at the end can be truncated by VACUUM&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg01124.php &amp;lt;nowiki&amp;gt;FSM search modes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://www.postgresql.org/message-id/20150424190403.GP4369@alvh.no-ip.org Re: Feedback on getting rid of VACUUM FULL]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a more compact data representation for dead tuple locations within VACUUM&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00143.php &amp;lt;nowiki&amp;gt;Re: Have vacuum emit a warning when it runs out of maintenance_work_mem&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide more information in order to improve user-side estimates of dead space bloat in relations&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2009-05/msg01039.php &amp;lt;nowiki&amp;gt;Re: Bloated Table&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce the number of table scans performed by vacuum&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg01119.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg00624.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Vacuum Gin indexes in physically order rather than logical order&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-04/msg00443.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid creation of the free space map for small tables&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg01751.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Auto-vacuum ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Issue log message to suggest VACUUM FULL if a table is nearly empty?&lt;br /&gt;
*[http://www.postgresql.org/message-id/F40B0968DB0A904DA78A924E633BE78645FAAF@SYDEXCHTMP2.au.fjanz.com discussion]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent long-lived temporary tables from causing frozen-xid advancement starvation&lt;br /&gt;
|The problem is that autovacuum cannot vacuum them to set frozen xids; only the session that created them can. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php &amp;lt;nowiki&amp;gt;Re: AutoVacuum Behaviour Question&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent autovacuum from running if an old transaction is still running from the last vacuum&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00899.php &amp;lt;nowiki&amp;gt;Re: Autovacuum and OldestXmin&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have autoanalyze of parent tables occur when child tables are modified&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-06/msg00137.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow visibility map all-visible bits to be set even when an auto-ANALYZE is running&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-01/msg00356.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve autovacuum tuning&lt;br /&gt;
* http://www.postgresql.org/message-id/5078AD6B.8060802@agliodbs.com&lt;br /&gt;
* http://www.postgresql.org/message-id/20130124215715.GE4528@alvh.no-ip.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve setting of visibility map bits for read-only and insert-only workloads&lt;br /&gt;
* http://www.postgresql.org/message-id/20130906001437.GA29264@momjian.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem when multiple subtransactions of the same outer transaction hold different types of locks, and one subtransaction aborts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-11/msg01011.php &amp;lt;nowiki&amp;gt;FOR SHARE vs FOR UPDATE locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00001.php &amp;lt;nowiki&amp;gt;Re: FOR SHARE vs FOR UPDATE locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00435.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] [pgsql-patches] Phantom Command IDs, updated patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00773.php &amp;lt;nowiki&amp;gt;Re: savepoints and upgrading locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve deadlock detection when a page cleaning lock conflicts with a shared buffer that is pinned&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-01/msg00138.php &amp;lt;nowiki&amp;gt;BUG #3883: Autovacuum deadlock with truncate?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php &amp;lt;nowiki&amp;gt;Thoughts about bug #3883&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-committers/2008-01/msg00365.php &amp;lt;nowiki&amp;gt;Re: pgsql: Add checks to TRUNCATE, CLUSTER, and REINDEX to prevent&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Detect deadlocks involving LockBufferForCleanup()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php &amp;lt;nowiki&amp;gt;Thoughts about bug #3883&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow finer control over who is cancelled in a deadlock&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01727.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Startup Time Improvements ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow backends to change their database without restart&lt;br /&gt;
|This allows for faster server startup.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00843.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00336.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Write-Ahead Log ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Eliminate need to write full pages to WAL before page modification&lt;br /&gt;
|Currently, to protect against partial disk page writes, we write full page images to WAL before they are modified so we can correct any partial page writes during recovery.  These pages can also be eliminated from point-in-time archive files. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2002-06/msg00655.php &amp;lt;nowiki&amp;gt;Re: Index Scans become Seq Scans after VACUUM ANALYSE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg01191.php&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20120105061916.GB21048@fetter.org WIP double writes]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4EFC449F02000025000441CD@gw.wicourts.gov double writes]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20120110214344.GB21106@fetter.org Double-write with Fast Checksums]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1962493974.656458.1327703514780.JavaMail.root@zimbra-prod-mbox-4.vmware.com double writes using &amp;quot;double-write buffer&amp;quot; approach]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-10/msg01463.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|When full page writes are off, write CRC to WAL and check file system blocks on recovery&lt;br /&gt;
|If CRC check fails during recovery, remember the page in case a later CRC for that page properly matches.  The difficulty is that hint bits are not WAL logged, meaning a valid page might not match the earlier CRC.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Write full pages during file system write and not when the page is modified in the buffer cache&lt;br /&gt;
|This allows most full page writes to happen in the background writer.  It might cause problems for applying WAL on recovery into a partially-written page, but later the full page will be replaced from WAL.&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CAGvK12UST-tPhyLrSLuSpwFxZbAO79yYrhV2xaLmS2MkUxNUVQ@mail.gmail.com Page Checksums + Double Writes]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow WAL information to recover corrupted pg_controldata&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] pg_resetxlog -r flag&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Speed WAL recovery by allowing more than one page to be prefetched&lt;br /&gt;
|This should be done utilizing the same infrastructure used for prefetching in general to avoid introducing complex error-prone code in WAL replay. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-12/msg00683.php &amp;lt;nowiki&amp;gt;Slow PITR restore&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00497.php &amp;lt;nowiki&amp;gt;Re: [GENERAL] Slow PITR restore&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg01279.php &amp;lt;nowiki&amp;gt;Read-ahead and parallelism in redo recovery&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve WAL concurrency by increasing lock granularity&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00556.php &amp;lt;nowiki&amp;gt;Reworking WAL locking&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have resource managers report the duration of their status changes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg01468.php &amp;lt;nowiki&amp;gt;Recovery of Multi-stage WAL actions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Close deleted WAL files held open in *nix by long-lived read-only backends&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg01754.php &amp;lt;nowiki&amp;gt;Deleted WAL files held open by backends in Linux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg00060.php &amp;lt;nowiki&amp;gt;Re: Deleted WAL files held open by backends in Linux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Optimizer / Executor ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve selectivity functions for geometric operators}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider increasing the default values of from_collapse_limit, join_collapse_limit, and/or geqo_threshold&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4136ffa0905210551u22eeb31bn5655dbe7c9a3aed5@mail.gmail.com from_collapse_limit vs. geqo_threshold]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve ability to display optimizer analysis using OPTIMIZER_DEBUG&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00597.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Log statements where the optimizer row estimates were dramatically different from the number of rows actually found?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider compressed annealing to search for query plans&lt;br /&gt;
|This might replace GEQO.&lt;br /&gt;
* http://archives.postgresql.org/message-id/15658.1241278636%40sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve use of expression indexes for ORDER BY &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-08/msg01553.php &amp;lt;nowiki&amp;gt;Resjunk sort columns, Heikki&#039;s index-only quals patch, and bug #5000&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Modify the planner to better estimate caching effects&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-11/msg00117.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow shared buffer cache contents to affect index cost computations&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg01140.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Hashing ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using a hash for joining to a large IN (VALUES ...) list&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00450.php &amp;lt;nowiki&amp;gt;Planning large IN lists&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow single batch hash joins to preserve outer pathkeys&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-09/msg00806.php Re: Potential Join Performance Issue]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use &amp;quot;lazy&amp;quot; hash tables to look up only the tuples that are actually requested&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid building the same hash table more than once during the same query&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid hashing for distinct and then re-hashing for hash join&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4136ffa0902191346g62081081v8607f0b92c206f0a@mail.gmail.com Re: Fixing Grittner&#039;s planner issues]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Background Writer ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having the background writer update the transaction status hint bits before writing out the page&lt;br /&gt;
|Implementing this requires the background writer to have access to system catalogs and the transaction status log.&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAMkU%3D1zf1Yo0dYJzJ-pk9o4mwLuMD4Uzw6Jck7u1nC_Xb2gYWA@mail.gmail.com Re: Autovacuum fails to keep visibility map up-to-date in mostly-insert-only-tables]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider adding buffers the background writer finds reusable to the free list &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php &amp;lt;nowiki&amp;gt;Background LRU Writer/free list&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CA+U5nMKtvyDcV4zTr7bq7t6cA2nBfLxCJ8tQgVBnc5ddRPO+Bg@mail.gmail.com our buffer replacement strategy is kind of lame]&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAOeZVic4HikhmzVD%3DZP4JY9g8PgpyiQQOXOELWP%3DkR+%3DH1Frgg@mail.gmail.com Page replacement algorithm in buffer cache]&lt;br /&gt;
* [http://www.postgresql.org/message-id/002f01ce50a8$e057c7a0$a10756e0$@kapila@huawei.com Move unused buffers to freelist]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Automatically tune bgwriter_delay based on activity rather then using a fixed interval&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php &amp;lt;nowiki&amp;gt;Background LRU Writer/free list&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CA+U5nMKtvyDcV4zTr7bq7t6cA2nBfLxCJ8tQgVBnc5ddRPO+Bg@mail.gmail.com our buffer replacement strategy is kind of lame]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider whether increasing BM_MAX_USAGE_COUNT improves performance&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg01007.php &amp;lt;nowiki&amp;gt;Bgwriter LRU cleaning: we&#039;ve been going at this all wrong&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Test to see if calling PreallocXlogFiles() from the background writer will help with WAL segment creation latency&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-06/msg00340.php &amp;lt;nowiki&amp;gt;Re: Load Distributed Checkpoints, final patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Concurrent Use of Resources ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Do async I/O for faster random read-ahead of data&lt;br /&gt;
|Async I/O allows multiple I/O requests to be sent to the disk with results coming back asynchronously.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg00820.php &amp;lt;nowiki&amp;gt;Asynchronous I/O Support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-09/msg00255.php &amp;lt;nowiki&amp;gt;Re: random_page_costs - are defaults of 4.0 realistic for SCSI RAID 1&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00027.php &amp;lt;nowiki&amp;gt;There&#039;s random access and then there&#039;s random access&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-01/msg00170.php &amp;lt;nowiki&amp;gt;Bitmap index scan preread using posix_fadvise (Was: There&#039;s random access and then there&#039;s random access)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
The above patch is already applied as of 8.4, but it still remains to figure out how to handle plain indexscans effectively.&lt;br /&gt;
* [http://archives.postgresql.org//pgsql-hackers/2009-01/msg00806.php Problems with the patch submitted for posix_fadvise in index scans]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|SMP scalability improvements&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00439.php &amp;lt;nowiki&amp;gt;Straightforward changes for increased SMP scalability&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00206.php &amp;lt;nowiki&amp;gt;Re: Reducing Transaction Start/End Contention&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== TOAST ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow user configuration of TOAST thresholds&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00213.php &amp;lt;nowiki&amp;gt;Re: Proposed adjustments in MaxTupleSize and toastthresholds&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00082.php &amp;lt;nowiki&amp;gt;pg_lzcompress strategy parameters&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce unnecessary cases of deTOASTing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00895.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Eliminate more detoast copies for packed varlenas&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce costs of repeat de-TOASTing of values&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg01096.php &amp;lt;nowiki&amp;gt;WIP patch: reducing overhead for repeat de-TOASTing&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have pg_stat_activity display query strings in the correct client encoding&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00131.php &amp;lt;nowiki&amp;gt;pg_stats queries versus per-database encodings&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow reporting of stalls due to wal_buffer wrap-around&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-02/msg00826.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Restructure pg_stat_database columns tup_returned and tup_fetched to return meaningful values&lt;br /&gt;
* http://www.postgresql.org/message-id/20121012060345.GA29214@toroid.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Improve handling of pg_stat_statements handling of bind &amp;quot;IN&amp;quot; variables&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAM3SWZSpdPB3uErnXWMt3q74y0r+84ZsOt2U3HKKes_V7O+0Qg@mail.gmail.com Revisiting pg_stat_statements and IN()]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Performance ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rather than consider mmap()-ing in 8k pages, consider mmap()&#039;ing entire files into a backend?&lt;br /&gt;
|Doing I/O to large tables would consume a lot of address space or require frequent mapping/unmapping.  Extending the file also causes mapping problems that might require mapping only individual pages, leading to thousands of mappings.  Another problem is that there is no way to _prevent_ I/O to disk from the dirty shared buffers so changes could hit disk before WAL is written.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01239.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow configuration of backend priorities via the operating system&lt;br /&gt;
|Though backend priorities make priority inversion during lock waits possible, research shows that this is not a huge problem.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-02/msg00493.php &amp;lt;nowiki&amp;gt;Priorities for users or queries?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider if CommandCounterIncrement() can avoid its AcceptInvalidationMessages() call&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-committers/2007-11/msg00585.php &amp;lt;nowiki&amp;gt;pgsql: Avoid incrementing the CommandCounter when&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider Cartesian joins when both relations are needed to form an indexscan qualification for a third relation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-12/msg00090.php &amp;lt;nowiki&amp;gt;Re: TB-sized databases&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider not storing a NULL bitmap on disk if all the NULLs are trailing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00624.php &amp;lt;nowiki&amp;gt;Proposal for Null Bitmap Optimization(for Trailing NULLs)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-12/msg00109.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Proposal for Null Bitmap Optimization(for TrailingNULLs)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Sort large UPDATE/DELETEs so it is done in heap order&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg01119.php &amp;lt;nowiki&amp;gt;Possible future performance improvement: sort updates/deletes by ctid&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add auto-tuning of work_mem&lt;br /&gt;
* [http://www.postgresql.org/message-id/20131009143046.GT22450@momjian.us Auto-tuning work_mem and maintenance_work_mem]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider decreasing the I/O caused by updating tuple hint bits&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00847.php &amp;lt;nowiki&amp;gt;Hint Bits and Write I/O&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-07/msg00199.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Hint Bits and Write I/O&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg00695.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00792.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg01063.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01408.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01453.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid reading in b-tree pages when replaying vacuum records in hot standby mode&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1272571938.4161.14739.camel@ebony &amp;lt;nowiki&amp;gt;Hot Standby tuning for btree_xlog_vacuum()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure truncation logic to be more resistant to failure&lt;br /&gt;
|This also involves not writing dirty buffers for a truncated or dropped relation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01032.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Enhance foreign data wrappers, parallelism, partitioning, and perhaps add a global snapshot/transaction manager to allow creation of a proof-of-concept built-in sharding solution&lt;br /&gt;
|Ideally these enhancements and new facilities will be available to external sharding solutions as well.&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/Built-in_Sharding Built-in sharding wiki]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Other ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Deal with encoding issues for filenames in the server filesystem&lt;br /&gt;
* {{MessageLink|20090413184335.39BE.52131E4D@oss.ntt.co.jp|a proposed patch here}}&lt;br /&gt;
* {{MessageLink|8484.1244655656@sss.pgh.pa.us|some issues about it here}}&lt;br /&gt;
* {{MessageLink|20100107103740.97A5.52131E4D@oss.ntt.co.jp|Windows-specific patch here}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Deal with encoding issues in the output of localeconv()&lt;br /&gt;
* [http://archives.postgresql.org/message-id/40c6d9160904210658y590377cfw6dbbecb53d2b8be0@mail.gmail.com bug report]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/49EF8DA0.90008@tpf.co.jp draft patch]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/21710.1243620986@sss.pgh.pa.us review of patch]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have GB18030 handle more than 2-byte Unicode code points&lt;br /&gt;
* [http://www.postgresql.org/message-id/20150309205145.4031.32069@wrigleys.postgresql.org GB18030 encoding doesn&#039;t support Unicode characters over 0xFFFF]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide schema name and other fields available from SQL GET DIAGNOSTICS in error reports&lt;br /&gt;
* [http://archives.postgresql.org/message-id/dcc563d10810211907n3c59a920ia9eb7cd2a6d5ea58@mail.gmail.com &amp;lt;nowiki&amp;gt;How to get schema name which violates fk constraint&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg00846.php &amp;lt;nowiki&amp;gt;patch - Report the schema along table name in a referential failure 	error message&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* {{MessageLink|3191.1263306359@sss.pgh.pa.us|Re: NOT NULL violation and error-message}}&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-08/msg00213.php &amp;lt;nowiki&amp;gt;the case for machine-readable error fields&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use sa_mask to close race conditions between signal handlers&lt;br /&gt;
* http://www.postgresql.org/message-id/20130911013107.GA225735@tornado.leadboat.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow pg_export_snapshot() to run on hot standby servers&lt;br /&gt;
|This will allow parallel pg_dump on such servers.&lt;br /&gt;
* [http://www.postgresql.org/message-id/CA+U5nML2VMJ3R2YBAZ+CsAsTWF3LuYSo16Wu9+yXFrfy4%3Df2fA@mail.gmail.com pg_export_snapshot on standby side]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a way to enumerate and unregister background workers&lt;br /&gt;
|Right now the only way to unregister bgworkers is from within the worker with &amp;lt;tt&amp;gt;proc_exit(0)&amp;lt;/tt&amp;gt; or registering with &amp;lt;tt&amp;gt;BGW_NEVER_RESTART&amp;lt;/tt&amp;gt;&lt;br /&gt;
* https://www.postgresql.org/message-id/CAMsr%2BYG-fD%2BmP-BNZDheVYucC7%3DoUn8ByTQSFz7RKkVX2MRS2Q%40mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow cross-compiling by generating the zic database on the target system}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve NLS maintenance of libpgport messages linked onto applications}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use UTF8 encoding for NLS messages so all server encodings can read them properly}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow creation of universal binaries for Darwin&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00884.php &amp;lt;nowiki&amp;gt;Getting to universal binaries for Darwin&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider GnuTLS if OpenSSL license becomes a problem&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg00892.php&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-05/msg00040.php &amp;lt;nowiki&amp;gt;[PATCH] Add support for GnuTLS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg01213.php &amp;lt;nowiki&amp;gt;TODO: GNU TLS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider making NAMEDATALEN more configurable}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Research use of signals and sleep wake ups&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00003.php &amp;lt;nowiki&amp;gt;Restartable signals &#039;n all that&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider simplifying how memory context resets handle child contexts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-08/msg00067.php &amp;lt;nowiki&amp;gt;Re: Memory leak in nodeAgg&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement the non-threaded Avahi service discovery protocol&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00939.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-02/msg00097.php &amp;lt;nowiki&amp;gt;Re: Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg01211.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-04/msg00001.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce data row alignment requirements on some 64-bit systems&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00369.php &amp;lt;nowiki&amp;gt;[WIP] Reduce alignment requirements on 64-bit systems.&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure TOAST internal storage format for greater flexibility&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00049.php &amp;lt;nowiki&amp;gt;Re: PG_PAGE_LAYOUT_VERSION 5 - time for change&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Consider removing the attribute options cache&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg00039.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Restructure /contrib section&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00705.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove configure.in check for link failure when the cause is found}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow psql to use readline once non-US code pages work with backslashes}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve signal handling&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-06/msg00027.php &amp;lt;nowiki&amp;gt;Simplify Win32 Signaling code&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support PGXS when using MSVC}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix MSVC NLS support, like for to_char()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00485.php &amp;lt;nowiki&amp;gt;NLS on MSVC  strikes back!&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-02/msg00038.php &amp;lt;nowiki&amp;gt;Fix for 8.3 MSVC locale (Was  [HACKERS] NLS on MSVC strikes back!)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix global namespace issues when using multiple terminal server sessions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/48F3BFCC.8030107@dunslane.net problems with Windows global namespace]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change from the current autoconf/gmake build system to cmake&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg01869.php &amp;lt;nowiki&amp;gt;About CMake (was Re: [COMMITTERS] pgsql: Append major version number and for libraries soname major)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve consistency of path separator usage&lt;br /&gt;
* http://archives.postgresql.org/message-id/49C0BDC5.4010002@hagander.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix cross-compiling on Windows&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-10/msg00110.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce file statistics overhead on directory reads&lt;br /&gt;
* http://www.postgresql.org/message-id/1338325561.82125.YahooMailNeo@web39304.mail.mud.yahoo.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix hang with long file paths&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAA4eK1JxaBofxpcgLqCx9EB%3Dm3PaXr9iFU9%3DV3ddDswsPZooxw@mail.gmail.com Long paths for tablespace leads to uninterruptible hang in Windows]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Wire Protocol Changes / v4 Protocol ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dynamic character set handling}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Ensure the client can determine the encoding of messages sent early in the handshake&lt;br /&gt;
* http://www.postgresql.org/message-id/541A5659.5050006@2ndquadrant.com}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Let the client indicate character encoding of database names, user names, passwords, and of pre-auth error messages returned by the server&lt;br /&gt;
* http://www.postgresql.org/message-id/16160.1360540050@sss.pgh.pa.us&lt;br /&gt;
* http://www.postgresql.org/message-id/20131220030725.GA1411150@tornado.leadboat.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Send numeric version to clients in fixed header&lt;br /&gt;
* [https://commitfest.postgresql.org/10/752/ &amp;lt;nowiki&amp;gt;patch to send server_version_num in v3 protocol as GUC_REPORT&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add decoded type length/precision (i.e. typmod information)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Mark result columns as known-not-null when possible&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-11/msg01029.php &amp;lt;nowiki&amp;gt;Adding nullable indicator to Describe&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use compression&lt;br /&gt;
|Specify and implement wire protocol compression. If SSL transparent compression is used, hopefully avoid the overhead of key negotiation and encryption when SSL is configured only for compression. Note that [https://www.ietf.org/mail-archive/web/tls/current/msg11619.html compression is being removed from TLS 1.3] so we really need to do it ourselves.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-06/msg00793.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Update clients to use data types, typmod, schema.table.column names of result sets using new statement protocol}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Set protocol for wire format negotiation&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CACMqXCKkGrGXxQhjHCKCe0B8hn6sTt-1sdgHZOSGQMxrusOsQA@mail.gmail.com GUC_REPORT for protocol tunables]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make sure upgrading to a 4.1 protocol version will actually work smoothly&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28307.1318255008@sss.pgh.pa.us Re: libpq, PQdescribePrepared -&amp;gt; PQftype, PQfmod, no PQnullable]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multi-state authentication (e.g. try client peer, fall back to md5)&lt;br /&gt;
* http://www.postgresql.org/message-id/51A44185.5060306@2ndquadrant.com&lt;br /&gt;
* http://www.postgresql.org/message-id/55192AFE.6080106@iki.fi&lt;br /&gt;
* http://www.postgresql.org/message-id/54DB1D4E.8090700@vmware.com&lt;br /&gt;
* https://commitfest.postgresql.org/6/320/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow re-authentication&lt;br /&gt;
|Let the client request re-authentication as a different user mid session, for connection pools that pass through the handshake.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Identify the affected object in CommandComplete message?&lt;br /&gt;
* http://www.postgresql.org/message-id/CAAfz9KNGVoyM+z_2tnPKTDXG_RdR9a33Y5s+zQ9LdwTTsqqZng@mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow negotiation of encryption, &amp;lt;tt&amp;gt;STARTTLS&amp;lt;/tt&amp;gt; style, rather than forcing client to decide on SSL or !SSL before connecting&lt;br /&gt;
* http://www.postgresql.org/message-id/5406EAD3.7070002@2ndquadrant.com}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Permit lazy fetches of large values, at least out-of-line TOASTED values&lt;br /&gt;
* http://www.postgresql.org/message-id/53FF0EF8.100@2ndquadrant.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add session-level whitelisting of types for binary-mode transfer&lt;br /&gt;
* http://www.postgresql.org/message-id/30470.1412055068@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Send client the xid when it is allocated&lt;br /&gt;
|Lets the client later ask the server &amp;quot;did this commit or not?&amp;quot; after interterminate result due to crash or connection loss&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Report xlog position in commit message&lt;br /&gt;
|Help enable client-side failover by providing a token clients can use to see if a commit has replayed to replicas yet&lt;br /&gt;
* http://www.postgresql.org/message-id/53E2D346.9030806@2ndquadrant.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Changes to make cancellations more reliable and more secure&lt;br /&gt;
* http://www.postgresql.org/message-id/CADT4RqAUd7wYYsM9D7GHJnZj3J79D4W%3Dved2kqM5mVt5cuGHgg@mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Clarify semantics of statement_timeout in extended query protocol&lt;br /&gt;
|Batched and pipelined queries have unexpected behaviour with statement_timeout. Client needs to be able to specify statement boundary with protocol message.&lt;br /&gt;
* https://www.postgresql.org/message-id/20160528.220442.1489791680347556026.t-ishii@sraoss.co.jp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create a more efficient way to handle out-of-line parameters&lt;br /&gt;
* [https://www.postgresql.org/message-id/12500.1470002232%40sss.pgh.pa.us Re: Slowness of extended protocol]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Separate transaction delineation from protocol error recovery (in v3 both are managed via the same Sync message)&lt;br /&gt;
* https://www.postgresql.org/message-id/CADT4RqDdo9EcFbxwB_YO2H3BVZ0t-1qqZ%3D%2B%2BdVMnYaN6BpyUGQ%40mail.gmail.com&lt;br /&gt;
* https://www.postgresql.org/message-id/CAMsr%2BYEgnJ8ZAWPLx5%3DBCbYYq9SNTdwbwvUcb7V-vYm5d5uhbQ%40mail.gmail.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a manpage for postgresql.conf&lt;br /&gt;
* {{messageLink|20080819194311.GH4428@alvh.no-ip.org|A smaller default postgresql.conf}}&lt;br /&gt;
* {{messageLink|200808211910.37524.peter_e@gmx.net|A smaller default postgresql.conf}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Document support for N&amp;lt;nowiki&amp;gt;&#039; &#039;&amp;lt;/nowiki&amp;gt; national character string literals, if it matches the SQL standard&lt;br /&gt;
* http://archives.postgresql.org/message-id/1275895438.1849.1.camel@fsopti579.F-Secure.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Exotic Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add pre-parsing phase that converts non-ISO syntax to supported syntax&lt;br /&gt;
|This could allow SQL written for other databases to run without modification.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow plug-in modules to emulate features from other databases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add features of Oracle-style packages&lt;br /&gt;
|A package would be a schema with session-local variables, public/private functions, and initialization functions.  It is also possible to implement these capabilities in any schema and not use a separate &amp;amp;quot;packages&amp;amp;quot; syntax at all.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-08/msg00384.php &amp;lt;nowiki&amp;gt;proposal for PL packages for 8.3.&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://www.postgresql.org/message-id/CAFj8pRD4OAXp2zp7dBRg5eo6X3rtT5MHTMVRN1e1kdK8xE6E4g@mail.gmail.com proposal: schema PL session variables]&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAFj8pRCfdTLeJbTSbAFOwhuS-aWaJ61w59XwKLcVYQFAVwfVCw%40mail.gmail.com proposal: session server side variables]&lt;br /&gt;
* [https://www.postgresql.org/message-id/81060c9d-73df-2266-8857-d584164bb699%40commandprompt.com Packages: Again]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider allowing control of upper/lower case folding of unquoted identifiers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-04/msg00818.php &amp;lt;nowiki&amp;gt;Bringing PostgreSQL torwards the standard regarding case folding&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg01527.php &amp;lt;nowiki&amp;gt;Re: [SQL] Case Preservation disregarding case sensitivity?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00849.php &amp;lt;nowiki&amp;gt;TODO Item: Consider allowing control of upper/lower case folding of unquoted,  identifiers&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00415.php &amp;lt;nowiki&amp;gt;Identifier case folding notes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00415.php &amp;lt;nowiki&amp;gt;Identifier case folding notes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://www.postgresql.org/message-id/ACF85C502E55A143AB9F4ECFE960660A17282D@mailserver2.local.mstarlabs.com Cluster wide option to control symbol case folding]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add autonomous transactions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00893.php &amp;lt;nowiki&amp;gt;autonomous transactions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Give query progress indication&lt;br /&gt;
* [[Query progress indication]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rethink our type system&lt;br /&gt;
* [[Rethinking datatypes]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features We Do &#039;&#039;Not&#039;&#039; Want ==&lt;br /&gt;
&lt;br /&gt;
The following features have been discussed ad nauseum on the PostgreSQL mailing lists and the consensus has been that the project is not interested in them.  As such, if you are going to bring them up as potential features, you will want to be familiar with all of the arguments against these features which have been previously made over the years.  If you decide to work on such features anyway, you should be aware that you face a higher-than-normal barrier to get the Project to accept them.&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|All backends running as threads in a single process (not wanted)&lt;br /&gt;
|This eliminates the process protection we get from the current setup. Thread creation is usually the same overhead as process creation on modern systems, so it seems unwise to use a pure threaded model, and MySQL and DB2 have demonstrated that threads introduce as many issues as they solve.  Threading specific operations such as I/O, seq scans, and connection management has been discussed and will probably be implemented to enable specific performance features.  Moving to a threaded engine would also require halting all other work on PostgreSQL for one to two years.&lt;br /&gt;
*  [https://www.postgresql.org/message-id/942824238.20160712165757@bitec.ru One process per session lack of sharing]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;quot;Oracle-style&amp;quot; optimizer hints (not wanted)&lt;br /&gt;
|Optimizer hints, as implemented in Oracle and other RDBMSes, are used to work around problems in the optimizer and introduce upgrade and maintenance issues.  We would rather have such problems reported and fixed.  We have discussed a more sophisticated system of per-class cost adjustment instead, but a specification remains to be developed. See [[OptimizerHintsDiscussion|Optimizer Hints Discussion]] for further information.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Embedded server (not wanted)&lt;br /&gt;
|While PostgreSQL clients runs fine in limited-resource environments, the server requires multiple processes and a stable pool of resources to run reliably and efficiently. Stripping down the PostgreSQL server to run in the same process address space as the client application would add too much complexity and failure cases. Besides, there are several very mature embedded SQL databases already available.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Obfuscated function source code (not wanted)&lt;br /&gt;
|Obfuscating function source code has minimal protective benefits because anyone with super-user access can find a way to view the code. At the same time, it would greatly complicate backups and other administrative tasks. To prevent non-super-users from viewing function source code, remove SELECT permission on pg_proc.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-09/msg00668.php &amp;lt;nowiki&amp;gt;Obfuscated stored procedures (was Re: Oracle and Postgresql)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Indeterminate behavior for the GROUP BY clause (not wanted)&lt;br /&gt;
|At least one other database product allows specification of a subset of the result columns which GROUP BY would need to be able to provide predictable results; the server is free to return any value from the group.  This is not viewed as a desirable feature.  PostgreSQL 9.1 allows result columns that are not referenced by GROUP BY if a primary key for the same table is referenced in GROUP BY.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-03/msg00297.php &amp;lt;nowiki&amp;gt;Re: SQL compatibility reminder: MySQL vs PostgreSQL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|On-disk bitmap indexes (not wanted)&lt;br /&gt;
|The rigidity of on-disk bitmap indexes, and the existence of GIN and in-memory bitmaps make this undesirable.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-07/msg00512.php &amp;lt;nowiki&amp;gt;Re: Bitmap index AM&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg01107.php &amp;lt;nowiki&amp;gt;Bitmap index thoughts&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00265.php &amp;lt;nowiki&amp;gt;Stream bitmaps&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01214.php &amp;lt;nowiki&amp;gt;Re: Bitmapscan changes - Requesting further feedback&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00013.php &amp;lt;nowiki&amp;gt;Updated bitmap index patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00741.php &amp;lt;nowiki&amp;gt;Reviewing new index types (was Re: [PATCHES] Updated bitmap indexpatch)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01023.php &amp;lt;nowiki&amp;gt;Bitmap Indexes: request for feedback&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/800923.27831.qm@web29010.mail.ird.yahoo.com &amp;lt;nowiki&amp;gt;bitmap indexes - performance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://www.postgresql.org/message-id/20130914181424.GA24448@toroid.org &amp;lt;nowiki&amp;gt;[PATCH] bitmap indexes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Corruption&amp;diff=34444</id>
		<title>Corruption</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Corruption&amp;diff=34444"/>
		<updated>2019-12-15T17:57:29Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Detecting corruption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VITALLY IMPORTANT FIRST RESPONSE ==&lt;br /&gt;
&lt;br /&gt;
Do you think you have one of those rare but nasty index or table corruption problems?&lt;br /&gt;
&lt;br /&gt;
Before doing &#039;&#039;anything&#039;&#039; else:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop the postmaster and take a file system level copy of your database NOW!&#039;&#039;&#039;. Don&#039;t use pg_dump, instead make a copy of all the files in the data directory (the one that contains the &amp;quot;base&amp;quot;, &amp;quot;pg_xlog&amp;quot;, &amp;quot;pg_clog&amp;quot; etc folders).&lt;br /&gt;
&lt;br /&gt;
If possible, put a copy of it on an external hard drive, DVD, or other storage you can disconnect from your computer so you don&#039;t accidentally modify your snapshot after making it.&lt;br /&gt;
&lt;br /&gt;
People often destroy potentially recoverable data by trying to repair it. Make a file-system-level copy of your database before attempting any repair. It might save your data.&lt;br /&gt;
&lt;br /&gt;
The experimental hex editor toolkit [https://github.com/petergeoghegan/pg_hexedit pg_hexedit] can be used for low-level analysis of PostgreSQL relation files. It should only be run against a copy of the database.&lt;br /&gt;
&lt;br /&gt;
Your backup copy is also important evidence that may help figure out what caused the problem, allowing you to prevent it from happening again. Repair efforts usually destroy that evidence. Having the damaged data may be the only way to figure out why it was damaged and how to prevent the same thing happening again.&lt;br /&gt;
&lt;br /&gt;
== Detecting corruption ==&lt;br /&gt;
&lt;br /&gt;
As of PostgreSQL 10, there is am [https://www.postgresql.org/docs/10/static/amcheck.html extension called amcheck]. Although it only verifies the integrity of B-Tree indexes, it is reasonably well suited for use as a general purpose corruption smoke test, especially because the indexes can be verified against the heap with the &amp;quot;heapallindexed&amp;quot; verification option (later versions only). Note that there is also a [https://github.com/petergeoghegan/amcheck version on Github that targets earlier PostgreSQL versions].&lt;br /&gt;
&lt;br /&gt;
PostgreSQL 9.6 introduced a [https://www.postgresql.org/docs/9.6/static/pgvisibility.html more specialized tool for verifying the integrity of the visibility map, called pg_visibility]. This may be of interest in cases where visibility map corruption is suspected specifically.&lt;br /&gt;
&lt;br /&gt;
== Causes ==&lt;br /&gt;
&lt;br /&gt;
Remember that most corruption is caused by hardware issues:&lt;br /&gt;
&lt;br /&gt;
* RAID controllers with faulty / worn out battery backup, and an unexpected power loss&lt;br /&gt;
* Hard disk drives with write-back cache enabled, and an unexpected power loss&lt;br /&gt;
* Cheap SSDs with insufficient power-loss protection, and an unexpected power-loss&lt;br /&gt;
* Defective RAM&lt;br /&gt;
* Defective or overheating CPU(s)&lt;br /&gt;
&lt;br /&gt;
Other causes can be:&lt;br /&gt;
&lt;br /&gt;
* Database systems configured with &amp;lt;tt&amp;gt;fsync=off&amp;lt;/tt&amp;gt; and an OS crash or power loss&lt;br /&gt;
* Filesystems configured to use write barriers plus a storage layer that ignores write barriers. [http://serverfault.com/questions/279571/lvm-dangers-and-caveats LVM was a particular culprit] but [https://bugzilla.kernel.org/show_bug.cgi?id=9554 full barrier support was added by Liunx 2.6.33-rc1].&lt;br /&gt;
* PostgreSQL bugs&lt;br /&gt;
* Operating system bugs&lt;br /&gt;
* Admin error&lt;br /&gt;
** directly modifying Postgres data-directory contents&lt;br /&gt;
** faulty fail-over procedures like &amp;lt;tt&amp;gt;rsync&amp;lt;/tt&amp;gt;&#039;ing without &amp;lt;tt&amp;gt;pg_start_backup&amp;lt;/tt&amp;gt;&lt;br /&gt;
** [http://blog.ringerc.id.au/2012/10/avoiding-postgresql-database-corruption.html and lots more]&lt;br /&gt;
&lt;br /&gt;
== What next? ==&lt;br /&gt;
&lt;br /&gt;
Consider contacting a [https://www.postgresql.org/support/professional_support/ professional support service provider]. Corruption issues can be time consuming and difficult to diagnose and fix, and are often hardware- or configuration-specific.&lt;br /&gt;
&lt;br /&gt;
Read the [[guide to reporting problems|Guide_to_reporting_problems]] and post to the pgsql-general mailing list with information about the problem. Remember that your hardware settings and postgresql configuration are vital information, as are any error messages, your Pg version, etc.&lt;br /&gt;
&lt;br /&gt;
[http://thebuild.com/presentations/worst-day-fosdem-2014.pdf Christophe Pettus&#039;s FOSDEM presentation on database corruption] is also well worth a read, but you don&#039;t get the spoken warnings that come with it. In particular, the recovery techniques described there are for recovering what you can from a DB, with the understanding that you&#039;ll have missing chunks of data, inconsistent FK relationships, reappearing deleted rows / visible uncommitted rows, and all sorts of problems depending on the repair technique used. It assumes you&#039;ve already done the sensible initial investigation and fixed any less serious problems that might be causing your issue.&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Python&amp;diff=34420</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Python&amp;diff=34420"/>
		<updated>2019-12-02T22:06:13Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several Python drivers for PostgreSQL.  This is the incomplete feature matrix for them; please help complete it as you see fit.&lt;br /&gt;
&lt;br /&gt;
In general, Python users want to use psycopg2 unless they have a strong reason to try another driver, most of which are no longer maintained.  Since DBAPI allows drivers to have different semantics, porting applications from one driver to another is non-trivial.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Software&lt;br /&gt;
!License&lt;br /&gt;
!Platforms&lt;br /&gt;
!Python versions&lt;br /&gt;
!DB API 2.0&lt;br /&gt;
!Native (uses libpq)&lt;br /&gt;
!Last Release&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Psycopg2]]&lt;br /&gt;
|LGPL&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6-3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2019&lt;br /&gt;
|Most popular python driver, required for most Python+Postgres frameworks &lt;br /&gt;
|-&lt;br /&gt;
|[https://pypi.python.org/pypi/pg8000 pg8000]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.3+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2019&lt;br /&gt;
|Used by Web2Py. [https://github.com/tlocke/pg8000 current updated official site]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/python-postgres/fe py-postgresql]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.0+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2018&lt;br /&gt;
|Pure Python with optional C accelerator modules,&amp;lt;br\&amp;gt;extensive custom API. Python 3 only. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pygresql.org/ PyGreSQL]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6 thru 3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2017&lt;br /&gt;
|The first PostgreSQL adapter for Python.  Still actively maintained.&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/ocpgdb/ ocpgdb]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2010&lt;br /&gt;
|PG8.1+&lt;br /&gt;
|-&lt;br /&gt;
|[http://barryp.org/software/bpgsql/ bpgsql ]&lt;br /&gt;
|LGPL&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2009&lt;br /&gt;
|labeled alpha&lt;br /&gt;
|-&lt;br /&gt;
|[https://aiopg.readthedocs.io/en/stable/ aiopg]&lt;br /&gt;
|BSD&lt;br /&gt;
|any&lt;br /&gt;
|3.52+&lt;br /&gt;
|(ish)&lt;br /&gt;
|Native&lt;br /&gt;
|2019&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
More abandoned driver projects:&lt;br /&gt;
&lt;br /&gt;
* [http://jamwt.com/pgasync/ pgasync], Twisted-native driver, no updates since 2005&lt;br /&gt;
* [http://sourceforge.net/projects/popy/ PoPy], no updates since 2003 - [https://github.com/Cito/PyGreSQL/commit/678cadfd2627b8821933ac8809ebafb15274882c development was merged with pygresql]&lt;br /&gt;
* [http://pypgsql.sourceforge.net/ pyPgSQL], no updates since 2006&lt;br /&gt;
&lt;br /&gt;
There is [http://wiki.python.org/moin/PostgreSQL similar page on the Python wiki]&lt;br /&gt;
&lt;br /&gt;
[[Python PostgreSQL Driver TODO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Python&amp;diff=34419</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Python&amp;diff=34419"/>
		<updated>2019-12-02T21:58:59Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several Python drivers for PostgreSQL.  This is the incomplete feature matrix for them; please help complete it as you see fit.&lt;br /&gt;
&lt;br /&gt;
In general, Python users want to use psycopg2 unless they have a strong reason to try another driver, most of which are no longer maintained.  Since DBAPI allows drivers to have different semantics, porting applications from one driver to another is non-trivial.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Software&lt;br /&gt;
!License&lt;br /&gt;
!Platforms&lt;br /&gt;
!Python versions&lt;br /&gt;
!DB API 2.0&lt;br /&gt;
!Native (uses libpq)&lt;br /&gt;
!Last Release&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Psycopg2]]&lt;br /&gt;
|LGPL&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6-3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2019&lt;br /&gt;
|Most popular python driver, required for most Python+Postgres frameworks &lt;br /&gt;
|-&lt;br /&gt;
|[https://pypi.python.org/pypi/pg8000 pg8000]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.3+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2019&lt;br /&gt;
|Used by Web2Py. [https://github.com/tlocke/pg8000 current updated official site]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/python-postgres/fe py-postgresql]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.0+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2018&lt;br /&gt;
|Pure Python with optional C accelerator modules,&amp;lt;br\&amp;gt;extensive custom API. Python 3 only. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pygresql.org/ PyGreSQL]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6 thru 3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2017&lt;br /&gt;
|The first PostgreSQL adapter for Python.  Still actively maintained.&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/ocpgdb/ ocpgdb]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2010&lt;br /&gt;
|PG8.1+&lt;br /&gt;
|-&lt;br /&gt;
|[http://barryp.org/software/bpgsql/ bpgsql ]&lt;br /&gt;
|LGPL&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2009&lt;br /&gt;
|labeled alpha&lt;br /&gt;
|-&lt;br /&gt;
|[https://aiopg.readthedocs.io/en/stable/ aiopg]&lt;br /&gt;
|BSD&lt;br /&gt;
|any&lt;br /&gt;
|(ish)&lt;br /&gt;
|Native&lt;br /&gt;
|2019&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
More abandoned driver projects:&lt;br /&gt;
&lt;br /&gt;
* [http://jamwt.com/pgasync/ pgasync], Twisted-native driver, no updates since 2005&lt;br /&gt;
* [http://sourceforge.net/projects/popy/ PoPy], no updates since 2003 - [https://github.com/Cito/PyGreSQL/commit/678cadfd2627b8821933ac8809ebafb15274882c development was merged with pygresql]&lt;br /&gt;
* [http://pypgsql.sourceforge.net/ pyPgSQL], no updates since 2006&lt;br /&gt;
&lt;br /&gt;
There is [http://wiki.python.org/moin/PostgreSQL similar page on the Python wiki]&lt;br /&gt;
&lt;br /&gt;
[[Python PostgreSQL Driver TODO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Python&amp;diff=34418</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Python&amp;diff=34418"/>
		<updated>2019-12-02T21:58:17Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several Python drivers for PostgreSQL.  This is the incomplete feature matrix for them; please help complete it as you see fit.&lt;br /&gt;
&lt;br /&gt;
In general, Python users want to use psycopg2 unless they have a strong reason to try another driver, most of which are no longer maintained.  Since DBAPI allows drivers to have different semantics, porting applications from one driver to another is non-trivial.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Software&lt;br /&gt;
!License&lt;br /&gt;
!Platforms&lt;br /&gt;
!Python versions&lt;br /&gt;
!DB API 2.0&lt;br /&gt;
!Native (uses libpq)&lt;br /&gt;
!Last Release&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Psycopg2]]&lt;br /&gt;
|LGPL&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6-3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2019&lt;br /&gt;
|Most popular python driver, required for most Python+Postgres frameworks &lt;br /&gt;
|-&lt;br /&gt;
|[https://pypi.python.org/pypi/pg8000 pg8000]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.3+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2019&lt;br /&gt;
|Used by Web2Py. [https://github.com/tlocke/pg8000 current updated official site]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/python-postgres/fe py-postgresql]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.0+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2018&lt;br /&gt;
|Pure Python with optional C accelerator modules,&amp;lt;br\&amp;gt;extensive custom API. Python 3 only. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pygresql.org/ PyGreSQL]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6 thru 3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2017&lt;br /&gt;
|The first PostgreSQL adapter for Python.  Still actively maintained.&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/ocpgdb/ ocpgdb]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2010&lt;br /&gt;
|PG8.1+&lt;br /&gt;
|-&lt;br /&gt;
|[http://barryp.org/software/bpgsql/ bpgsql ]&lt;br /&gt;
|LGPL&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2009&lt;br /&gt;
|labeled alpha&lt;br /&gt;
|-&lt;br /&gt;
|[https://aiopg.readthedocs.io/en/stable/ aiopg]&lt;br /&gt;
|BSD&lt;br /&gt;
|any&lt;br /&gt;
|-ish&lt;br /&gt;
|Native&lt;br /&gt;
|2019&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
More abandoned driver projects:&lt;br /&gt;
&lt;br /&gt;
* [http://jamwt.com/pgasync/ pgasync], Twisted-native driver, no updates since 2005&lt;br /&gt;
* [http://sourceforge.net/projects/popy/ PoPy], no updates since 2003 - [https://github.com/Cito/PyGreSQL/commit/678cadfd2627b8821933ac8809ebafb15274882c development was merged with pygresql]&lt;br /&gt;
* [http://pypgsql.sourceforge.net/ pyPgSQL], no updates since 2006&lt;br /&gt;
&lt;br /&gt;
There is [http://wiki.python.org/moin/PostgreSQL similar page on the Python wiki]&lt;br /&gt;
&lt;br /&gt;
[[Python PostgreSQL Driver TODO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Python&amp;diff=34417</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Python&amp;diff=34417"/>
		<updated>2019-12-02T21:47:07Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several Python drivers for PostgreSQL.  This is the incomplete feature matrix for them; please help complete it as you see fit.&lt;br /&gt;
&lt;br /&gt;
In general, Python users want to use psycopg2 unless they have a strong reason to try another driver, most of which are no longer maintained.  Since DBAPI allows drivers to have different semantics, porting applications from one driver to another is non-trivial.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Software&lt;br /&gt;
!License&lt;br /&gt;
!Platforms&lt;br /&gt;
!Python versions&lt;br /&gt;
!DB API 2.0&lt;br /&gt;
!Native (uses libpq)&lt;br /&gt;
!Last Release&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Psycopg2]]&lt;br /&gt;
|LGPL&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6-3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2019&lt;br /&gt;
|Most popular python driver, required for most Python+Postgres frameworks &lt;br /&gt;
|-&lt;br /&gt;
|[https://pypi.python.org/pypi/pg8000 pg8000]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.3+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2019&lt;br /&gt;
|Used by Web2Py. [https://github.com/tlocke/pg8000 current updated official site]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/python-postgres/fe py-postgresql]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.0+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2018&lt;br /&gt;
|Pure Python with optional C accelerator modules,&amp;lt;br\&amp;gt;extensive custom API. Python 3 only. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pygresql.org/ PyGreSQL]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6 thru 3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2017&lt;br /&gt;
|The first PostgreSQL adapter for Python.  Still actively maintained.&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/ocpgdb/ ocpgdb]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2010&lt;br /&gt;
|PG8.1+&lt;br /&gt;
|-&lt;br /&gt;
|[http://barryp.org/software/bpgsql/ bpgsql ]&lt;br /&gt;
|LGPL&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2009&lt;br /&gt;
|labeled alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
More abandoned driver projects:&lt;br /&gt;
&lt;br /&gt;
* [http://jamwt.com/pgasync/ pgasync], Twisted-native driver, no updates since 2005&lt;br /&gt;
* [http://sourceforge.net/projects/popy/ PoPy], no updates since 2003 - [https://github.com/Cito/PyGreSQL/commit/678cadfd2627b8821933ac8809ebafb15274882c development was merged with pygresql]&lt;br /&gt;
* [http://pypgsql.sourceforge.net/ pyPgSQL], no updates since 2006&lt;br /&gt;
&lt;br /&gt;
There is [http://wiki.python.org/moin/PostgreSQL similar page on the Python wiki]&lt;br /&gt;
&lt;br /&gt;
[[Python PostgreSQL Driver TODO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Python&amp;diff=34416</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Python&amp;diff=34416"/>
		<updated>2019-12-02T21:46:24Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several Python drivers for PostgreSQL.  This is the incomplete feature matrix for them; please help complete it as you see fit.&lt;br /&gt;
&lt;br /&gt;
In general, Python users want to use psycopg2 unless they have a strong reason to try another driver, most of which are no longer maintained.  Since DBAPI allows drivers to have different semantics, porting applications from one driver to another is non-trivial.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Software&lt;br /&gt;
!License&lt;br /&gt;
!Platforms&lt;br /&gt;
!Python versions&lt;br /&gt;
!DB API 2.0&lt;br /&gt;
!Native (uses libpq)&lt;br /&gt;
!Last Release&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Psycopg2]]&lt;br /&gt;
|LGPL&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6-3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2019&lt;br /&gt;
|Most popular python driver, required for most Python+Postgres frameworks &lt;br /&gt;
|-&lt;br /&gt;
|[https://pypi.python.org/pypi/pg8000 pg8000]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.3+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2019&lt;br /&gt;
|Used by Web2Py. [https://github.com/tlocke/pg8000 current updated official site]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/python-postgres/fe py-postgresql]&lt;br /&gt;
|BSD&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|3.0+&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2016&lt;br /&gt;
|Pure Python with optional C accelerator modules,&amp;lt;br\&amp;gt;extensive custom API. Python 3 only. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pygresql.org/ PyGreSQL]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix, Win32&lt;br /&gt;
|2.6 thru 3.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2017&lt;br /&gt;
|The first PostgreSQL adapter for Python.  Still actively maintained.&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/ocpgdb/ ocpgdb]&lt;br /&gt;
|BSD&lt;br /&gt;
|Unix&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|2010&lt;br /&gt;
|PG8.1+&lt;br /&gt;
|-&lt;br /&gt;
|[http://barryp.org/software/bpgsql/ bpgsql ]&lt;br /&gt;
|LGPL&lt;br /&gt;
|any (pure Python)&lt;br /&gt;
|2.3-2.6&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|2009&lt;br /&gt;
|labeled alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
More abandoned driver projects:&lt;br /&gt;
&lt;br /&gt;
* [http://jamwt.com/pgasync/ pgasync], Twisted-native driver, no updates since 2005&lt;br /&gt;
* [http://sourceforge.net/projects/popy/ PoPy], no updates since 2003 - [https://github.com/Cito/PyGreSQL/commit/678cadfd2627b8821933ac8809ebafb15274882c development was merged with pygresql]&lt;br /&gt;
* [http://pypgsql.sourceforge.net/ pyPgSQL], no updates since 2006&lt;br /&gt;
&lt;br /&gt;
There is [http://wiki.python.org/moin/PostgreSQL similar page on the Python wiki]&lt;br /&gt;
&lt;br /&gt;
[[Python PostgreSQL Driver TODO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Hash_Join&amp;diff=34305</id>
		<title>Hash Join</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Hash_Join&amp;diff=34305"/>
		<updated>2019-11-01T04:14:54Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a page to track ideas and ongoing work for hash joins.  See also the [[Parallel_Hash]] page for parallelism-specific ideas.&lt;br /&gt;
&lt;br /&gt;
Some active discussions with patches:&lt;br /&gt;
&lt;br /&gt;
* Hash joins can, in extreme cases, use more memory that they are allowed to, if hash-based partitioning fails to divide the inner relation up enough to fit in the memory budget.  [https://www.postgresql.org/message-id/flat/20190520143152.77nrjewyd3mbsbyj%40development#980efe458aa3feecbdbbdcc75688e7d6 Thread discussing strategies for respecting work_mem more strictly].&lt;br /&gt;
&lt;br /&gt;
* Hash joins can decide to use a huge number of partitions in order to fit into work_mem, but the partition book-keeping is unmetered so can be way more than work_mem.  [https://www.postgresql.org/message-id/flat/20190504003414.bulcbnge3rhwhcsh@development Thread discussing that, somewhat intertwined with the above discussion].&lt;br /&gt;
&lt;br /&gt;
* Hash Join and Hash nodes seem to be very tightly coupled.  [https://www.postgresql.org/message-id/flat/20191028231526.wcnwag7lllkra4qt%40alap3.anarazel.de Perhaps we should just merge them into one?]&lt;br /&gt;
&lt;br /&gt;
* We could use Bloom filters.  (Add short explanation here).  [https://www.postgresql.org/message-id/flat/5670946E.8070705%402ndquadrant.com Thread] [https://www.postgresql.org/message-id/flat/c902844d-837f-5f63-ced3-9f7fd222f175%402ndquadrant.com Thread]&lt;br /&gt;
&lt;br /&gt;
Observations without patches:&lt;br /&gt;
&lt;br /&gt;
* nodeHashjoin.c&#039;s switch case HJ_SCAN_BUCKET calls ExecScanHashBucket() which contains ExecQualAndReset(hash clauses), and then after that returns it immediately does ExecQual(joinqual).  So we pay the cost of evaluator setup twice, instead of doing both together.  The reason we have to do this that EXPLAIN needs to count the two kinds of filtering separately, and we don&#039;t have a mechanism to build a single expression which ANDs together two filters and but maintains two separate counters.  This might apply to other join types too.  (Observation made by Andres Freund in private discussion with Thomas Munro, who added this note here.)&lt;br /&gt;
&lt;br /&gt;
* Tuples are copied to intermediate palloc&#039;d memory while loading them into the hash table during conversion to minimal tuple; we really just want to copy them directly into place in the hash table having allocated the memory!&lt;br /&gt;
&lt;br /&gt;
* Memory is allocated in chunks that waste a ton of &amp;quot;invisible&amp;quot; memory on some OSes.  [https://www.postgresql.org/message-id/flat/CAEepm%3D1bRyd%2B_W9eW-QmP1RGP03ti48zgd%3DK11Q6o4edQLgkcg%40mail.gmail.com Thread].&lt;br /&gt;
&lt;br /&gt;
* Andres: There&#039;s too many indirections for hashtable lookups. For a successful hashtable lookup we need the following pointer dereferences: 1) HashJoinState-&amp;gt;hj_HashTable (and a bunch of related state), 2) HashJoinTable-&amp;gt;unshared 3) HashJoinTable-&amp;gt;unshared[bucket] (likely uncached), 4) HashJoinTuple-&amp;gt;hashvalue (likely uncached)&lt;br /&gt;
** We should work on at least removing the indirection for -&amp;gt;hashvalue, by moving the hashvalue into HashJoinTable-&amp;gt;unshared[bucket], rather than that being just a pointer. It might be worthwhile to also store the -&amp;gt;next pointer inline.&lt;br /&gt;
** It could also be worthwhile to just embed the HashJoinTableData into the HashJoinState. As far as I can tell there&#039;s really no need for that to be a separate pointer indirection.&lt;br /&gt;
&lt;br /&gt;
* Andres: The whole notion of HashJoinTuple is suspect - needing to perform the offsetting math in various places costs cycles itself, but also makes it harder to avoid unnecessary allocations in other places.&lt;br /&gt;
&lt;br /&gt;
* Andres: The bucket scanning API (ExecScanHashBucket()) leads to unnecessary unpredictable branches, in a path that already suffers heavily from stalls.&lt;br /&gt;
** In a query where every lookup is a match (very commmon), the branch that decides whether to continue lookups in a previous bucket, or perform a fresh lookup, reaches both paths at roughly 50% - the worst case for a branch predictor. Instead there should be separate function for continuing a bucket search, which should be called by either branching earlier in the caller (will be very predictable), or even better by having a separate hj_JoinState value for continuing a bucket search.&lt;br /&gt;
** Currently the same &amp;quot;if&amp;quot; determines whether there is a match in a fresh lookup (common), and whether there&#039;s further tuples in a bucket (uncommon). That leads to inefficient branch prediction. Should be split.&lt;br /&gt;
** It might be worthwhile to move the check whether to search the skew hashtable into either a) the ExecHashJoinImpl() state-machine, by having a separate state for searching buckets in the skew hashtable b) just moving the check into ExecHashJoinImpl(), which&#039;d at least allow to reuse the result of previous checks.&lt;br /&gt;
&lt;br /&gt;
* Perhaps different hash join nodes could share a hash table, for the benefit of partition-wise joins.  [https://www.postgresql.org/message-id/flat/CAOP8fzaVL_2SCJayLL9kj5pCA46PJOXXjuei6-3aFUV45j4LJQ%40mail.gmail.com Thread].&lt;br /&gt;
&lt;br /&gt;
* There are arbitrary limits on the number of buckets you can have that come from using int in the logic and from respecting a 1GB memory allocation limit.  If you run very large hash joins, you finish up hitting the cap of 64 (or is it 128?) million buckets and then the load factor goes beyond 1 due to this.  It would be nice to fix that, as memories and data sets increase in size.&lt;br /&gt;
&lt;br /&gt;
* Our load factor accounting should ideally be based on the number of unique keys, not the number of tuples.  If there are a duplicate keys in the inner relation, we finish up with a too-sparse hash table.&lt;br /&gt;
&lt;br /&gt;
Some work on the horizon:&lt;br /&gt;
&lt;br /&gt;
* Andres Freund is working on transforming execution plans into a &amp;quot;linear programs&amp;quot; of opcodes (and eventually probably also machine code via LLVM), like SQLite and System R.  This means we&#039;ll need to figure out how to break our hash join algorithm into steps that can be expressed that way.&lt;br /&gt;
&lt;br /&gt;
* Even before we get that far, there may be micro-optimisation opportunities where we JIT some of the hashing work? Andres: Indeed, the evaluation of the hash keys is fairly expensive, especially with multiple columns. We should add an expression step for mixing hash values, and use that to build an expression that does not just evaluate the key, but immediately hashes it.&lt;br /&gt;
&lt;br /&gt;
Some highly speculative work:&lt;br /&gt;
&lt;br /&gt;
* It&#039;s possible to make hash joins go faster by peeking ahead at the next tuple to be probed, and prefetching the right memory cache line.  [https://www.postgresql.org/message-id/flat/CAEepm%3D2y9HM9QP%2BHhRZdQ3pU6FShSMyu%3DV1uHXhQ5gG-dketHg%40mail.gmail.com Experimental hack thread with links to academic papers].  To do this well might require executor changes to that we can get a batch of tuples at the same time, and process them without escaping the current node.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_vs_SQL_Standard&amp;diff=33825</id>
		<title>PostgreSQL vs SQL Standard</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_vs_SQL_Standard&amp;diff=33825"/>
		<updated>2019-07-25T06:55:26Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Major features simply not implemented yet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page attempts to document those instances where PostgreSQL deviates from standard SQL. It is not necessarily complete, and doesn&#039;t attempt to include all cases where an optional feature is not implemented or only partially implemented.&lt;br /&gt;
&lt;br /&gt;
== Issues not yet classified ==&lt;br /&gt;
&lt;br /&gt;
=== NOT NULL constraints on composite-type columns ===&lt;br /&gt;
&lt;br /&gt;
The spec defines a &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; column constraint as being equivalent to &amp;lt;code&amp;gt;CHECK(&amp;lt;i&amp;gt;column&amp;lt;/i&amp;gt; IS NOT NULL)&amp;lt;/code&amp;gt;, thus importing the semantics of composite-type null tests.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; as a simple &amp;quot;is not the null value&amp;quot; test, and therefore allows a row value with some null fields to be stored contrary to the spec.&lt;br /&gt;
&lt;br /&gt;
=== COALESCE on row types ===&lt;br /&gt;
&lt;br /&gt;
The spec defines &amp;lt;code&amp;gt;COALESCE(X,Y)&amp;lt;/code&amp;gt; as a syntactic transformation to &amp;lt;code&amp;gt;CASE WHEN X IS NOT NULL THEN X ELSE Y END&amp;lt;/code&amp;gt; (it leaves open the question of whether X is really evaluated twice by disallowing non-deterministic expressions or expressions with side effects in this context). A consequence of this is that the rather odd rules for null tests of row types are applied.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL applies only the &amp;quot;is not the null value&amp;quot; test to X. Accordingly, if X is a row value containing null columns, PostgreSQL will return X, while the spec would require returning Y.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fixable issues ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, but there appears to be no major obstacle to changing it to conform.&lt;br /&gt;
&lt;br /&gt;
=== Wrong return type for extract() ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that &amp;lt;code&amp;gt;extract()&amp;lt;/code&amp;gt; return an exact numeric type.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL returns an approximate numeric type (&amp;lt;code&amp;gt;double precision&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
There are obviously some backward compatibility concerns that would have to be considered before changing this one, but they don&#039;t look serious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues with some block to implementation ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, or where an otherwise desirable feature is missing, but there is some technical issue that would make it harder to implement.&lt;br /&gt;
&lt;br /&gt;
=== LISTAGG() ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LISTAGG()&amp;lt;/code&amp;gt; is the standard SQL equivalent of our &amp;lt;code&amp;gt;string_agg()&amp;lt;/code&amp;gt;, but it uses the ordered-set aggregate syntax.&lt;br /&gt;
&lt;br /&gt;
Implementing this in the most straightforward way would require erasing many of the existing distinctions between ordered-set aggregate syntax and conventional aggregate syntax. Currently we require that ordered-set aggs be called using &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt;, while ordinary aggs must not use &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt; but may have an embedded &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; clause in their arguments (as per the standard &amp;lt;code&amp;gt;ARRAY_AGG()&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LISTAGG()&amp;lt;/code&amp;gt; does not have the semantics of an ordered-set aggregate, so implementing it other than as a special case would mean allowing ordinary aggs to be called using &amp;lt;code&amp;gt;WITHIN GROUP&amp;lt;/code&amp;gt; as an alternative to their normal syntax.&lt;br /&gt;
&lt;br /&gt;
=== Data change delta tables ===&lt;br /&gt;
&lt;br /&gt;
These are the standard&#039;s closest equivalent to our &amp;lt;code&amp;gt;RETURNING&amp;lt;/code&amp;gt; and writable CTEs, but the visibility and trigger firing rules appear to be different to those of wCTEs, so one can&#039;t be implemented in terms of the other.&lt;br /&gt;
&lt;br /&gt;
=== Identifier lengths ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that identifiers be allowed up to 18 characters even if the &amp;quot;long identifiers&amp;quot; feature is not declared; if it is, then the limit is 128 characters. Note that this limit is in characters and not bytes.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL limits the significant length of an identifier to 63 &#039;&#039;&#039;bytes&#039;&#039;&#039; unless specified otherwise at compile time; this isn&#039;t enough for 18 unicode characters.&lt;br /&gt;
&lt;br /&gt;
Currently we use the fixed-length &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; type for names; making it larger would significantly inflate the sizes of many system catalogs, while making it variable length would be a compatibility issue (e.g. changing the order of columns in many system catalogs to put the name field after the fixed-length fields).&lt;br /&gt;
&lt;br /&gt;
=== DISTINCT aggregates as window functions ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL does not allow &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; in aggregates when they are invoked as window functions.&lt;br /&gt;
&lt;br /&gt;
The existing implementation of &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; would be quite hard to adapt to window functions.&lt;br /&gt;
&lt;br /&gt;
=== Deferrable CHECK and NOT NULL ===&lt;br /&gt;
&lt;br /&gt;
The spec defines &amp;lt;code&amp;gt;NOT NULL&amp;lt;/code&amp;gt; in terms of &amp;lt;code&amp;gt;CHECK&amp;lt;/code&amp;gt;, and allows &amp;lt;code&amp;gt;CHECK&amp;lt;/code&amp;gt; constraints to be deferrable.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL currently does all these checks before actually inserting the new or modified row.&lt;br /&gt;
&lt;br /&gt;
=== FULL OUTER JOIN conditions ===&lt;br /&gt;
&lt;br /&gt;
The spec allows any join condition for a &amp;lt;code&amp;gt;FULL OUTER JOIN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL currently limits such conditions to ones that are implementable without constructing explicit &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; operations; that is, the condition must be hashable, mergeable, or constant.&lt;br /&gt;
&lt;br /&gt;
Adding support for arbitrary full joins (which would likely require constructing a &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; of the inner join and the two anti-joins) seems like a lot of work for minimal gain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Issues with some block at design level ==&lt;br /&gt;
&lt;br /&gt;
These are cases where PG&#039;s behavior differs from the spec, or where an otherwise desirable feature is missing, but there is some technical issue that makes it hard to even decide how to implement it.&lt;br /&gt;
&lt;br /&gt;
=== ANY() and SOME() aggregates ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL supports &amp;lt;code&amp;gt;every()&amp;lt;/code&amp;gt; from the standard, and provides &amp;lt;code&amp;gt;bool_or&amp;lt;/code&amp;gt; as a nonstandard spelling of the &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;SOME&amp;lt;/code&amp;gt; aggregate function, but two syntax conflicts make it impossible to parse the standard&#039;s &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt; syntax:&lt;br /&gt;
&lt;br /&gt;
# PostgreSQL allows &amp;lt;code&amp;gt;= ANY (array_expression)&amp;lt;/code&amp;gt; as a form of quantified comparison predicate (this is an extension to the spec)&lt;br /&gt;
# PostgreSQL allows subselects in all contexts to have additional parentheses, which the spec does not allow&lt;br /&gt;
&lt;br /&gt;
The spec&#039;s syntax for &amp;lt;code&amp;gt;ANY(expression)&amp;lt;/code&amp;gt; as an aggregate function can be parsed unambiguously only because the spec&#039;s version of &amp;lt;code&amp;gt;ANY&amp;lt;/code&amp;gt; as a quantified comparison predicate must have the keyword &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; immediately following the &amp;lt;code&amp;gt;ANY(&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unreserved keywords as select-list aliases without AS ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that &amp;lt;code&amp;gt;SELECT 1 ZONE&amp;lt;/code&amp;gt; be equivalent to &amp;lt;code&amp;gt;SELECT 1 AS ZONE&amp;lt;/code&amp;gt;. PostgreSQL accepts only the latter form or alternatively requires the identifier to be quoted.&lt;br /&gt;
&lt;br /&gt;
The main syntax ambiguity here is caused by the presence of postfix operators in PostgreSQL syntax; &amp;lt;code&amp;gt;SELECT 1 ! ZONE&amp;lt;/code&amp;gt; would be ambiguous between treating the operator as postfix or infix (we take it as being infix in this case by using precedence rules). Additional ambiguities exist with compound type names using &amp;lt;code&amp;gt;NATIONAL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VARYING&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;WITHOUT&amp;lt;/code&amp;gt; (which would likely have to be made reserved words, as they are in the spec). &amp;lt;code&amp;gt;WITHIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FILTER&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;OVER&amp;lt;/code&amp;gt;, and the datetime component names, which are not currently reserved in PostgreSQL, would also need to become reserved words. Since adding so many more reserved words is likely to break existing queries, this isn&#039;t considered a particularly viable solution.&lt;br /&gt;
&lt;br /&gt;
=== DROP DOMAIN … CASCADE ===&lt;br /&gt;
&lt;br /&gt;
The spec says that &amp;lt;code&amp;gt;DROP DOMAIN … CASCADE&amp;lt;/code&amp;gt; does not drop any columns, but simply changes any columns of the domain type to instead use the base type with the addition of the domain&#039;s defaults and constraints.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL drops columns of the domain type.&lt;br /&gt;
&lt;br /&gt;
The issue here is that we can reach a &amp;lt;code&amp;gt;DROP DOMAIN&amp;lt;/code&amp;gt; by cascading from a drop of another object, such as a schema containing the domain or a function referenced in the domain&#039;s default or constraints. Supporting the standard behavior would therefore mean altering objects in ways that add new dependencies from within the code that traverses the existing dependencies, which seems problematic.&lt;br /&gt;
&lt;br /&gt;
=== Temporary tables ===&lt;br /&gt;
&lt;br /&gt;
In the spec, temporary tables are persistent schema objects whose &#039;&#039;data&#039;&#039; (and only the data) is temporary and per-session. Implementing these in PostgreSQL would actually have substantial advantages (catalog bloat when using temp tables heavily is a common problem); but PostgreSQL&#039;s existing behavior is very well-entrenched and changing it would cause compatibility issues.&lt;br /&gt;
&lt;br /&gt;
(One approach sometimes suggested would be to use the spec&#039;s method if &amp;lt;code&amp;gt;GLOBAL&amp;lt;/code&amp;gt; was specified when creating the table.)&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parens in VALUES ===&lt;br /&gt;
&lt;br /&gt;
The spec allows &amp;lt;code&amp;gt;VALUES 1,2,3&amp;lt;/code&amp;gt; (as an explicit table with 1 column, 3 rows).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires parens on each row: &amp;lt;code&amp;gt;VALUES (1),(2),(3)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It looks like the only obstacle here is that &amp;lt;code&amp;gt;VALUES&amp;lt;/code&amp;gt; would need to become a reserved word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Issues where we explicitly choose to disregard the spec (WONTFIX) ==&lt;br /&gt;
&lt;br /&gt;
=== Identifier case ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds unquoted identifiers to lowercase, not the uppercase that the spec requires.&lt;br /&gt;
&lt;br /&gt;
=== Constraint name scope ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats the scope of a table or column constraint name as being the table it belongs to. The spec requires that such names be unique over the whole schema.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s behavior here severely limits the usefulness of several &amp;lt;code&amp;gt;information_schema&amp;lt;/code&amp;gt; views, which are defined on the assumption of schema-wide constraint name uniqueness.&lt;br /&gt;
&lt;br /&gt;
=== TIMESTAMP WITH TIME ZONE ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s timestamp with time zone type is very different from the standard one.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;timestamp &#039;2018-06-01 00:00:00+1200&#039;&amp;lt;/code&amp;gt; is a timestamp without timezone, spec says it should be with timezone.&amp;lt;br&amp;gt;PostgreSQL does not allow the type of a literal to depend on its string value.&lt;br /&gt;
# &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; does not store a timezone offset, but is interpreted with the session timezone.&amp;lt;br&amp;gt;The spec&#039;s timezone handling is less than useless, PostgreSQL&#039;s is actually useful.&lt;br /&gt;
&lt;br /&gt;
=== AT TIME ZONE ===&lt;br /&gt;
&lt;br /&gt;
Our &amp;lt;code&amp;gt;AT TIME ZONE&amp;lt;/code&amp;gt; operator is somewhat different to the spec&#039;s.&lt;br /&gt;
&lt;br /&gt;
The spec says:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time[stamp] without time zone&amp;lt;/code&amp;gt; returns a result of the corresponding &amp;lt;code&amp;gt;with time zone&amp;lt;/code&amp;gt; type.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time[stamp] with time zone&amp;lt;/code&amp;gt;, the result is of the same type.&lt;br /&gt;
&lt;br /&gt;
What PostgreSQL does is:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt; returns a result of type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;t AT TIME ZONE z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;time without time zone&amp;lt;/code&amp;gt; casts the value of &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; to type &amp;lt;code&amp;gt;time with time zone&amp;lt;/code&amp;gt; and then proceeds as the previous option.&lt;br /&gt;
&lt;br /&gt;
This permits various transforms which are simply not possible in the spec&#039;s crippled timezone support, such as converting a wallclock time from one location to another via two applications of &amp;lt;code&amp;gt;AT TIME ZONE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== INTERVAL ===&lt;br /&gt;
&lt;br /&gt;
The standard interval type assumes that all days are the same length, and therefore intervals can be divided into &amp;quot;year-month&amp;quot; and &amp;quot;day-second&amp;quot; values; only one of which can be present in any single interval value or column.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s interval type has three fields: months,days,[micro]seconds and allows all three to be present simultaneously.&lt;br /&gt;
&lt;br /&gt;
Rationale: the spec&#039;s lack of usable timezone support makes its interval type useless too.&lt;br /&gt;
&lt;br /&gt;
=== Transaction management ===&lt;br /&gt;
&lt;br /&gt;
The spec&#039;s model of the relationship between the database and its clients differs from PostgreSQL&#039;s (and most other databases for that matter). This leaves the spec&#039;s requirements concerning how transactions begin and end as somewhat inconsistent, with some statements being defined as implicitly starting transactions and others not (and some may or may not implicitly start transactions depending on variable content).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats all client requests (which may contain multiple statements) as being wrapped in a transaction (auto-committing at the end of the request) except where &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;START TRANSACTION&amp;lt;/code&amp;gt; is used explicitly.&lt;br /&gt;
&lt;br /&gt;
=== Default transaction isolation level ===&lt;br /&gt;
&lt;br /&gt;
The spec declares &amp;lt;code&amp;gt;SERIALIZABLE&amp;lt;/code&amp;gt; to be the default isolation level, but PostgreSQL defaults to &amp;lt;code&amp;gt;READ COMMITTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Object ownership scope ===&lt;br /&gt;
&lt;br /&gt;
The standard controls ownership of objects only at the schema level; objects inside a schema belong to the schema&#039;s owner.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL tracks ownership at individual object level.&lt;br /&gt;
&lt;br /&gt;
Rationale: this PG behavior dates back to before it had schemas, and is much more flexible than the standard&#039;s approach.&lt;br /&gt;
&lt;br /&gt;
=== Trigger firing order ===&lt;br /&gt;
&lt;br /&gt;
The standard says that trigger firing order on a table depends on creation order of the triggers.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL fires triggers in order of name.&lt;br /&gt;
&lt;br /&gt;
Rationale: documentation says &amp;quot;this was judged to be more convenient&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Trigger firing relative to referential constraint actions ===&lt;br /&gt;
&lt;br /&gt;
The spec requires that when a referential action (e.g. &amp;lt;code&amp;gt;CASCADE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SET NULL&amp;lt;/code&amp;gt;) causes a &amp;lt;code&amp;gt;BEFORE&amp;lt;/code&amp;gt; trigger to be fired, the referential action is actually performed before firing the trigger.&lt;br /&gt;
&lt;br /&gt;
One possible motivation for this is to ensure that the trigger function doesn&#039;t see the inconsistent intermediate state of the database in which the FK is violated.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, PostgreSQL always runs the &amp;lt;code&amp;gt;BEFORE&amp;lt;/code&amp;gt; trigger before doing the operation.&lt;br /&gt;
&lt;br /&gt;
In addition, the spec requires that referential constraints are enforced before &amp;lt;code&amp;gt;AFTER&amp;lt;/code&amp;gt; triggers. PostgreSQL instead enforces them via triggers with names of the form &amp;lt;code&amp;gt;&amp;quot;RI_ConstraintTrigger_…&amp;quot;&amp;lt;/code&amp;gt; which are executed in name order with respect to other triggers (see [[#Trigger_firing_order|this item]]).&lt;br /&gt;
&lt;br /&gt;
=== LIKE with no escape clause ===&lt;br /&gt;
&lt;br /&gt;
The standard says that &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; has no escape character if the &amp;lt;code&amp;gt;ESCAPE&amp;lt;/code&amp;gt; clause was not specified.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats a missing &amp;lt;code&amp;gt;ESCAPE&amp;lt;/code&amp;gt; clause as if it were &amp;lt;code&amp;gt;ESCAPE &#039;\&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rationale: historical.&lt;br /&gt;
&lt;br /&gt;
=== Declared type of string literals ===&lt;br /&gt;
&lt;br /&gt;
The standard says that the type of a string literal is fixed-length character string, i.e. &amp;lt;code&amp;gt;character(&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the length of the literal.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL treats untyped literals as being of unknown type and deduces the type from context (even in contexts where the spec does not provide for contextual typing). If no type is deduced, the value is treated either as &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;unknown&amp;lt;/code&amp;gt; type depending on context and PostgreSQL version.&lt;br /&gt;
&lt;br /&gt;
=== Trailing spaces in character(n) ===&lt;br /&gt;
&lt;br /&gt;
Trailing spaces in char(n) values are removed in contexts where the spec requires they be kept.&lt;br /&gt;
&lt;br /&gt;
An example is that &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; will remove trailing spaces from a &amp;lt;code&amp;gt;character(n)&amp;lt;/code&amp;gt; pattern parameter (but not from the first parameter).&lt;br /&gt;
&lt;br /&gt;
Rationale: PG actually converts char(n) to text in most contexts and all the relevant functions and operators take text args, rather than having separate versions for char(n).&lt;br /&gt;
&lt;br /&gt;
=== FETCH FIRST 0 ROWS ===&lt;br /&gt;
&lt;br /&gt;
The spec requires an error to be generated for specifying a limit of 0. We generate errors only for values strictly less than 0.&lt;br /&gt;
&lt;br /&gt;
=== Early enforcement of non-deferrable UNIQUE ===&lt;br /&gt;
&lt;br /&gt;
The spec says that &amp;lt;code&amp;gt;UNIQUE&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;PRIMARY KEY&amp;lt;/code&amp;gt;) constraints are enforced at statement end and not row-by-row when in immediate mode, with no distinction between non-deferrable constraints and deferrable constraints currently set to immediate mode.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL enforces non-deferrable constraints row-by-row, and deferrable constraints in immediate mode at statement end. This is a compromise between wanting to preserve the hard semantic guarantees of uniqueness in row-by-row mode (relied on by the planner in order to prove result uniqueness), while allowing conflicting updates (e.g. &amp;lt;code&amp;gt;UPDATE … SET uniq = uniq + 1&amp;lt;/code&amp;gt; where really necessary.&lt;br /&gt;
&lt;br /&gt;
=== Lexing of string literals and comments ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL rejects all of these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- intentionally not using source here--&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
select &#039;foo&#039;&lt;br /&gt;
 /**/ &#039;bar&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; /**/ &#039;bar&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select U&amp;amp;&#039;foo&#039; UESCAPE /**/ &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; as U&amp;amp;&amp;quot;foo&amp;quot; UESCAPE /**/ &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select U&amp;amp;&#039;foo&#039; /**/ UESCAPE &#039;x&#039; from ...&lt;br /&gt;
&lt;br /&gt;
select &#039;foo&#039; as U&amp;amp;&amp;quot;foo&amp;quot; /**/ UESCAPE &#039;x&#039; from ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first of those is certainly legal in the spec; the remainder are more debatable since the spec is rather unclear.&lt;br /&gt;
&lt;br /&gt;
Regarding the second case:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.3 &amp;amp;lt;literal&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
7) In a &amp;lt;code&amp;gt;&amp;amp;lt;character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;national character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;Unicode character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;&amp;amp;lt;binary string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; shall contain a &amp;lt;code&amp;gt;&amp;amp;lt;newline&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But SQL2016 also says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.2 &amp;amp;lt;token&amp;amp;gt; and &amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
11) SQL text containing one or more instances of &amp;lt;code&amp;gt;&amp;amp;lt;comment&amp;amp;gt;&amp;lt;/code&amp;gt; is equivalent to the same SQL text with the &amp;lt;code&amp;gt;&amp;amp;lt;comment&amp;amp;gt;&amp;lt;/code&amp;gt; replaced with &amp;lt;code&amp;gt;&amp;amp;lt;newline&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which implies that the input should have been accepted.&lt;br /&gt;
&lt;br /&gt;
Regarding the remaining cases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.2 &amp;amp;lt;token&amp;amp;gt; and &amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt; ::=&amp;lt;br&amp;gt;  { &amp;amp;lt;comment&amp;amp;gt; | &amp;amp;lt;white space&amp;amp;gt; }...&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
7) Any &amp;lt;code&amp;gt;&amp;amp;lt;token&amp;amp;gt;&amp;lt;/code&amp;gt; may be followed by a &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;5.3 &amp;amp;lt;literal&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Syntax Rules&amp;lt;br&amp;gt;&lt;br /&gt;
11) In a &amp;lt;code&amp;gt;&amp;amp;lt;Unicode character string literal&amp;amp;gt;&amp;lt;/code&amp;gt;, there shall be no&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; between the &amp;quot;U&amp;quot; and the &amp;lt;code&amp;gt;&amp;amp;lt;ampersand&amp;amp;gt;&amp;lt;/code&amp;gt; nor between the&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;ampersand&amp;amp;gt;&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;&amp;amp;lt;quote&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which seems to imply that &amp;lt;code&amp;gt;&amp;amp;lt;separator&amp;amp;gt;&amp;lt;/code&amp;gt; around the &amp;lt;code&amp;gt;UESCAPE&amp;lt;/code&amp;gt; would be permitted; indeed, no other rule permits any kind of whitespace there.&lt;br /&gt;
&lt;br /&gt;
There&#039;s no present desire to fix this because of the added complexity in the lexer. It is possible that this could be revisited if the lexer is redesigned in future.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues where PostgreSQL actually conforms to the spec ==&lt;br /&gt;
&lt;br /&gt;
These issues have been claimed or discussed as violations, but where PostgreSQL currently conforms to the spec as written. These are for reference in case they come up again; also, cases where PostgreSQL formerly violated the spec can be noted here as fixed.&lt;br /&gt;
&lt;br /&gt;
=== null return from every(x) ===&lt;br /&gt;
&lt;br /&gt;
In the query &amp;lt;code&amp;gt;SELECT every(x) FROM t;&amp;lt;/code&amp;gt; the result will be &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; has no rows or all values of &amp;lt;code&amp;gt;t.x&amp;lt;/code&amp;gt; are &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. This is correct as per the spec, even though it&#039;s inconsistent with conventional mathematical usage (in which an AND of no terms should return true).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;!-- ================================================================================================================================ --&amp;gt;&lt;br /&gt;
== Major features simply not implemented yet ==&lt;br /&gt;
&lt;br /&gt;
*  CREATE TABLE … (LIKE … INCLUDING GENERATED)&lt;br /&gt;
*  MATCH PARTIAL&lt;br /&gt;
*  references in typed tables&lt;br /&gt;
*  fetch first … with ties&lt;br /&gt;
*  fetch first … percent&lt;br /&gt;
*  more functional dependencies&lt;br /&gt;
*  row pattern recognition&lt;br /&gt;
*  partition join&lt;br /&gt;
*  distinct types&lt;br /&gt;
*  temporal tables&lt;br /&gt;
*  generated columns (partially implemented)&lt;br /&gt;
*  respect/ignore nulls for window functions&lt;br /&gt;
*  &amp;quot;from last&amp;quot; for nth_value&lt;br /&gt;
*  many more&lt;br /&gt;
*  CAST(val AS type FORMAT &#039;template&#039;)&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=33486</id>
		<title>PostgreSQL Clients</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=33486"/>
		<updated>2019-05-22T17:08:52Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* DBeaver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a partial list of interactive SQL clients - that doesn&#039;t include reporting engines, ETL data loaders, visual design tools, just interactive clients that you can type SQL in to and get results from them.&lt;br /&gt;
&lt;br /&gt;
== CLI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== psql ====&lt;br /&gt;
&lt;br /&gt;
https://www.postgresql.org/docs/current/static/app-psql.html&lt;br /&gt;
&lt;br /&gt;
The standard command line client, maintained by the postgresql development group and typically distributed as part of the server installation.&lt;br /&gt;
&lt;br /&gt;
==== pgcli ====&lt;br /&gt;
&lt;br /&gt;
https://www.pgcli.com&lt;br /&gt;
&lt;br /&gt;
A command line client with syntax highlighting and pop-up command completion.&lt;br /&gt;
&lt;br /&gt;
==== jaqy ====&lt;br /&gt;
&lt;br /&gt;
https://teradata.github.io/jaqy/&lt;br /&gt;
&lt;br /&gt;
A universal JDBC command line client with lots of features.  It is not specific to PostgreSQL, but it is pre-configured to handle PostgreSQL servers.  Requires PostgreSQL JDBC driver.&lt;br /&gt;
&lt;br /&gt;
== macOS GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Postbird ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLPro for Postgres ====&lt;br /&gt;
&lt;br /&gt;
http://www.macpostgresclient.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
macOS 10.8 and above&lt;br /&gt;
&lt;br /&gt;
100% native OS X app with a clean and simple to use interface. Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
&lt;br /&gt;
==== TablePlus ====&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
A modern, native client for relational databases with nice UI and very convenient query editor. It&#039;s compatible with all versions of Postgres.&lt;br /&gt;
&lt;br /&gt;
==== Postico ====&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
A nice native client by the developers of [http://postgresapp.com Postgres.app].  A free &amp;quot;demo&amp;quot; version of an inexpensive proprietary app, but it has very reasonable limits and no time limit.&lt;br /&gt;
&lt;br /&gt;
==== pgEdit ====&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Not a standalone client, rather a plugin for [https://macromates.com Textmate] for using psql.&lt;br /&gt;
&lt;br /&gt;
==== PSequel ====&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
==== SEQUEL for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases.&lt;br /&gt;
&lt;br /&gt;
== Windows GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== DBTools Manager ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines.&lt;br /&gt;
&lt;br /&gt;
==== EMS SQL Manager for PostgreSQL Freeware ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
&lt;br /&gt;
There is a proprietary version available with significantly more functionality.&lt;br /&gt;
&lt;br /&gt;
==== Marshal SQL Utility ====&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
==== dbForge Studio for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
dbForge Studio for PostgreSQL is a GUI tool for managing and developing databases and objects. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and UI. The tool provides a data editing tool to customize your queries and property window so that users can view all the required information of PostgreSQL database objects they are interested in.&lt;br /&gt;
&lt;br /&gt;
==== AnySQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
https://www.sqlmaestro.com/products/postgresql/maestro/&lt;br /&gt;
&lt;br /&gt;
Allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
==== Access ====&lt;br /&gt;
&lt;br /&gt;
https://products.office.com/en-us/access&lt;br /&gt;
&lt;br /&gt;
Yes, you can use MS Access as a PostgreSQL database interface. Supports data access to PostgreSQL tables and views; many ODBC-based limitations and errors.&lt;br /&gt;
&lt;br /&gt;
==== VSQL++ for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpp.com/products/postgresql-management/&lt;br /&gt;
&lt;br /&gt;
A powerful Postgresql database management tool to help DBA sto manage the database objects easy and quickly.&lt;br /&gt;
&lt;br /&gt;
==== Nucleon Database Master ====&lt;br /&gt;
&lt;br /&gt;
http://nucleonsoftware.com/products/database-master&lt;br /&gt;
&lt;br /&gt;
Supports PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite&lt;br /&gt;
&lt;br /&gt;
==== SQLPro ====&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== PGExplorer ====&lt;br /&gt;
&lt;br /&gt;
http://www.PGExplorer.com&lt;br /&gt;
&lt;br /&gt;
Hasn&#039;t been significantly updated in many years, but latest downloads suggest it may support Postgresql 9.* to some extent.&lt;br /&gt;
&lt;br /&gt;
== Linux / Unix GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Gnome DB ====&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
Has an experimental Windows build available too.&lt;br /&gt;
&lt;br /&gt;
==== Kexi ====&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
A visual database application creator, c.f. Access or FileMaker&lt;br /&gt;
&lt;br /&gt;
== Cross-platform GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 3 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, Linux, FreeBSD, macOS, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
For many years the &amp;quot;standard&amp;quot; freely available GUI client for Postgresql, and so is bundled in many packaged installers. It provides a SQL query tool, an editor for procedural languages and a CRUD interface. It&#039;s also one of the few clients to provide a GUI front end to the plpgsql debugger.&lt;br /&gt;
&lt;br /&gt;
Development has been discontinued by pgadmin.org,  but it is still being maintained by BigSQL who are doing basic maintenance to support current versions of PostgreSQL and packaging it for current OS releases [[https://www.openscg.com/bigsql/pgadmin3/index.jsp/ here]]&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, [https://yum.postgresql.org rpm], Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== LibreOffice Base ====&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/discover/base/&lt;br /&gt;
&lt;br /&gt;
Supports MySQL/MariaDB, Adabas D, MS Access and PostgreSQL, as well as other JDBC/ODBC databases.&lt;br /&gt;
&lt;br /&gt;
==== Tora ====&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux, Windows, macOS&lt;br /&gt;
&lt;br /&gt;
Oracle, MySQL, and PostgreSQL, as well as limited support for ODBC targets.  Inspired by the proprietary Toad client.&lt;br /&gt;
&lt;br /&gt;
==== SQL Workbench/J ====&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
An OpenSource (though it prohibits usage by government agencies from USA, UK, Canada, China, Russia, North Korea, Syria, Saudi Arabia, Turkey and the Chechen Republic) SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
It has some [http://sql-workbench.net/manual/license.html#license-restrictions restrictions] on use by government employees.&lt;br /&gt;
&lt;br /&gt;
==== Druid III ====&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information.&lt;br /&gt;
&lt;br /&gt;
==== Power*Architect ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
==== DBeaver ====&lt;br /&gt;
&lt;br /&gt;
https://dbeaver.io&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Supports many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2019.&lt;br /&gt;
&lt;br /&gt;
==== pgManage ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/pgManage/pgManage&lt;br /&gt;
&lt;br /&gt;
An alternative to pgAdmin, which runs in both application and server modes.&lt;br /&gt;
&lt;br /&gt;
==== OmniDB ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Linux, Windows and macOS&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== Valentina Studio (Free) ====&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool.&lt;br /&gt;
&lt;br /&gt;
There is a proprietary version available with additional functionality.&lt;br /&gt;
&lt;br /&gt;
==== RazorSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JetBrains DataGrip ====&lt;br /&gt;
&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multicursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
&lt;br /&gt;
Other JetBrains IDEs have plugins available to provide similar functionality.&lt;br /&gt;
&lt;br /&gt;
==== Aqua Data Studio ====&lt;br /&gt;
&lt;br /&gt;
http://www.aquafold.com/index-postgresql.html&lt;br /&gt;
&lt;br /&gt;
Java: Windows/Linux/macOS/Solaris&lt;br /&gt;
&lt;br /&gt;
Aqua Data Studio is a management tool for the PostgreSQL relational database w/ administration capabilities and a database query tool. The visual administration features provide users the ability to browse and modify database structures, including schema objects, database storage and maintain database security. An integrated query tool allows users to quickly create, edit and execute SQL queries and scripts. Aqua Data Studio also provides an import and export tool to allow users to easily move data in and out of the PostgreSQL database in and from different data formats.&lt;br /&gt;
&lt;br /&gt;
==== Navicat ====&lt;br /&gt;
&lt;br /&gt;
https://www.navicat.com/en/products/navicat-for-postgresql&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, iOS&lt;br /&gt;
&lt;br /&gt;
Navicat is a powerful PostgreSQL Database Server administration and development tool. It works with PostgreSQL 8.0 version or above and supports most of the PostgreSQL features including Trigger, Function, View, Manage User, and so on. It is also not only sophisticated enough for professional developers, but also easy to learn for new users. With its well-designed GUI, Navicat lets you quickly and easily create, organize, access and share information in a secure and easy way.&lt;br /&gt;
&lt;br /&gt;
==== DbVisualizer ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/macOS/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLTool Pro Database Editor ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases. JDBC.&lt;br /&gt;
&lt;br /&gt;
== Web Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== franchise ====&lt;br /&gt;
&lt;br /&gt;
https://franchise.cloud/&lt;br /&gt;
&lt;br /&gt;
Web client, either hosted (free) or running locally, connects to a local postgresql instance via a small bridge application.&lt;br /&gt;
&lt;br /&gt;
Can share the interface with others, rather like sqlfiddle.com, but accessing your database.&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== TeamPostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
==== Adminer ====&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. A single PHP file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
==== OmniDB ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Django/Python&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
==== Tadpole DB Hub ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
==== SIDU ====&lt;br /&gt;
&lt;br /&gt;
http://topnew.net/sidu/&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Schema and data browser and editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hisha ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/xshogi/hisha&lt;br /&gt;
&lt;br /&gt;
Node.js&lt;br /&gt;
&lt;br /&gt;
Hisha is cross-platform and web-based Postgre SQL Database client inspired by Adminium. You can edit and save result by clicking the cell you want and press enter when you finish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== JackDB ====&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
A hosted service, so it requires external access to your database.&lt;br /&gt;
&lt;br /&gt;
==== DBHawk ====&lt;br /&gt;
&lt;br /&gt;
https://www.datasparc.com/dbhawk/&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Query editor, report builder, schema and data browser.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== phpPgAdmin ====&lt;br /&gt;
&lt;br /&gt;
http://phppgadmin.sourceforge.net/doku.php&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Similar to phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries.&lt;br /&gt;
&lt;br /&gt;
(last updated 2013, 9.2.x)&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
[[Community Guide to PostgreSQL GUI Tools]] - the source for a lot of this page. Includes many non-client tools, such as bulk loaders, schema diff, schema design, etc.&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development] - from 2009&lt;br /&gt;
&lt;br /&gt;
[[GUI Database Design Tools]] - tools for designing database schemas&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33413</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33413"/>
		<updated>2019-05-04T17:34:55Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Alphabetized FLOSS options.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
https://dbeaver.io&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Linux, Windows and macOS&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is an Open Source management tool for PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editing tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== pgrights: GUI for PostgreSQL roles, privileges and policies ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/apsavin/pgrights&lt;br /&gt;
&lt;br /&gt;
MacOS (based on Electron, so versions for other OS can be build from source code).&lt;br /&gt;
&lt;br /&gt;
Open-source software which allows you to easely understand what can do (and what can&#039;t) a PostgreSQL user with a table&#039;s data. In other words, it&#039;s a viewer of results of GRANT commands and row-level security rules applied for a particular table and for a particular role.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== SQuirrel ===&lt;br /&gt;
&lt;br /&gt;
http://www.squirrelsql.org/&lt;br /&gt;
&lt;br /&gt;
Platforms that support Java&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
SQuirreL SQL Client is a graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc. The minimum version of Java supported is 1.8.x as of SQuirreL version 3.8.1.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== SQLGate ===&lt;br /&gt;
&lt;br /&gt;
https://www.sqlgate.com/product/download&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQLGate is a simple but powerful IDE for multiple Database including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* Powerful Data Grid and ERD&lt;br /&gt;
&lt;br /&gt;
* Multiple SQL Execution&lt;br /&gt;
&lt;br /&gt;
* Auto-Complete&lt;br /&gt;
&lt;br /&gt;
* Intuitive UI/UX&lt;br /&gt;
&lt;br /&gt;
* Multiple Themes&lt;br /&gt;
&lt;br /&gt;
* Fast processing speed&lt;br /&gt;
&lt;br /&gt;
Use SQLGate to maximize your productivity!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface. It comes in two editions - Standard and Express (free).&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
* SQL Development&lt;br /&gt;
* Database Explorer&lt;br /&gt;
* Data Editor&lt;br /&gt;
* Data Export and Import&lt;br /&gt;
* Pivot Table&lt;br /&gt;
* Master-Detail Browser&lt;br /&gt;
* Data Reports&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or proprietary license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Replicator Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/replicator&lt;br /&gt;
&lt;br /&gt;
Replicator allows table data comparison and sync - even with heterogeneous databases. It is unique in the fact it can replicate changes only even if source is non-relational (CSV, DBF, Excel documents, Paradox...). Replicator has a built-in scheduler for easy periodic change replication.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
=== Database Tour Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.databasetour.net&lt;br /&gt;
&lt;br /&gt;
Database Tour Pro is a database tool with built-in report builder for Windows. It works with different types of relational databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Creating tables.&lt;br /&gt;
* Viewing and editing data.&lt;br /&gt;
* Several ways to print data.&lt;br /&gt;
* Built-in report engine and visual report designer with templates, expressions, preview etc.&lt;br /&gt;
* Expression builder for report and export expressions.&lt;br /&gt;
* Building and executing SQL queries. Support for execution of multi statement SQL scripts. Syntax highlighting in SQL editor. Support for parameterized SQL queries.&lt;br /&gt;
* Enhanced database grids, which allow to view and manipulate the data in the most convenient way, including sorting by clicking column header, changing row heights, resizing columns etc.&lt;br /&gt;
* Command line support for executing queries, opening tables, export-import operations, loading reports etc. with logging the performed operations.&lt;br /&gt;
* Searching and replacing text in database with ability to choose fields, record range etc.&lt;br /&gt;
* Importing data to table from another table or a query.&lt;br /&gt;
* Exporting data from open table or query to file(s) like text, CSV, HTML, XLSX, XML, RTF, DBF or to another relational database.&lt;br /&gt;
* Copying data to clipboard.&lt;br /&gt;
* Viewing and editing Blob data, such as large text and graphics.&lt;br /&gt;
* Tools for editing text fields (trimming, changing case of symbols, replacing text).&lt;br /&gt;
* Customized data view (font, background).&lt;br /&gt;
* Conditional formatting data in database grids and reports.&lt;br /&gt;
* Ability to control transactions.&lt;br /&gt;
&lt;br /&gt;
=== Reportizer ===&lt;br /&gt;
&lt;br /&gt;
https://www.reportizer.net&lt;br /&gt;
&lt;br /&gt;
Reportizer is a database reporting tool, which allows easy creating, modifying, and printing database reports from different types of databases, including PostgreSQL. Reports can be edited in convenient visual report builder or in text mode. It supports calculating fields, multi-column reports, expressions, grouping, displaying images etc. Reportizer can export reports to HTML, XLSX, image, or internal format. There is an ability to load and print reports from command line. Reportizer allows to manage report collections, which can be held either in files or in database tables.&lt;br /&gt;
&lt;br /&gt;
=== Exportizer Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.vlsoftware.net/exportizer-pro/&lt;br /&gt;
&lt;br /&gt;
Exportizer Pro is a database export tool, which can work with PostgreSQL database either as source or destination. It allows to export data to database, file, clipboard, or printer.&lt;br /&gt;
* Possible sources: ODBC data sources, files of DB (Paradox), DBF (dBase, FoxPro), MDB, ACCDB, XLS, XLSX, GDB, IB, FDB, HTML, UDL, DBC, TXT, CSV types, databases specified by ADO connection strings, and databases like Oracle, SQL Server, Postgresql, DB2, Informix, SQLite, Interbase etc.&lt;br /&gt;
* Possible destinations: file formats like text, CSV, XLS, XLSX, RTF, XML, HTML, PDF, DBF, SLK, SQL script, and relational database of any supported type.&lt;br /&gt;
* It is possible to export all or selected tables from an open database at once.&lt;br /&gt;
* Exportizer Pro can automatically detect the most known image types (JPEG, PNG, GIF, BMP, ICO) in BLOB fields and export them, for example, to HTML or XLSX.&lt;br /&gt;
* There is an ability to specify the source-to-target field mappings.&lt;br /&gt;
* Export operations can be performed either via the program interface or via command line.&lt;br /&gt;
&lt;br /&gt;
=== TiCodeX SQL Schema Compare ===&lt;br /&gt;
&lt;br /&gt;
https://www.ticodex.com/&lt;br /&gt;
&lt;br /&gt;
TiCodeX SQL Schema Compare is a tools that allows database administrators to compare multiple database schema in order to manage versioning.&amp;lt;br/&amp;gt;&lt;br /&gt;
The software runs on Windows, Linux and Mac and supports Microsoft SQL (MS-SQL), MySQL, PostgreSQL, Azure SQL and MS-SQL on Amazon RDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key Features:&#039;&#039;&#039;&lt;br /&gt;
* Runs on Windows, Linux and MacOS&lt;br /&gt;
* Localized in English, German and Italian&lt;br /&gt;
* Compare changes between two SQL Database schemas (as example from development to test to production)&lt;br /&gt;
* View database differences and explore schema changes to see what&#039;s going on&lt;br /&gt;
* Automatically create full database migration scripts&lt;br /&gt;
* Securely save database and server login details&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
pgMustard is a performance tool for PostgreSQL that provides a user interface for your EXPLAIN ANALYSE output, as well as tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Quickly see the slowest operations&lt;br /&gt;
* Code snippets to tie operations back to the query&lt;br /&gt;
* Tips to speed up your query💡&lt;br /&gt;
* Does the arithmetic for you (including wall clock times)&lt;br /&gt;
* Explanations of operation types and key concepts&lt;br /&gt;
* Links to relevant documentation and blog posts&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
* JSON format plans&lt;br /&gt;
* Any supported version of PostgreSQL&lt;br /&gt;
* English language only&lt;br /&gt;
* Web application, no installation required&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33412</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33412"/>
		<updated>2019-05-04T17:21:26Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* DBeaver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is an Open Source management tool for PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editing tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== SQuirrel ===&lt;br /&gt;
&lt;br /&gt;
http://www.squirrelsql.org/&lt;br /&gt;
&lt;br /&gt;
Platforms that support Java&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
SQuirreL SQL Client is a graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc. The minimum version of Java supported is 1.8.x as of SQuirreL version 3.8.1.&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
https://dbeaver.io&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Linux, Windows and macOS&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgrights: GUI for PostgreSQL roles, privileges and policies ===&lt;br /&gt;
https://github.com/apsavin/pgrights&lt;br /&gt;
&lt;br /&gt;
MacOS (based on Electron, so versions for other OS can be build from source code).&lt;br /&gt;
&lt;br /&gt;
Open-source software which allows you to easely understand what can do (and what can&#039;t) a PostgreSQL user with a table&#039;s data. In other words, it&#039;s a viewer of results of GRANT commands and row-level security rules applied for a particular table and for a particular role.&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== SQLGate ===&lt;br /&gt;
&lt;br /&gt;
https://www.sqlgate.com/product/download&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQLGate is a simple but powerful IDE for multiple Database including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* Powerful Data Grid and ERD&lt;br /&gt;
&lt;br /&gt;
* Multiple SQL Execution&lt;br /&gt;
&lt;br /&gt;
* Auto-Complete&lt;br /&gt;
&lt;br /&gt;
* Intuitive UI/UX&lt;br /&gt;
&lt;br /&gt;
* Multiple Themes&lt;br /&gt;
&lt;br /&gt;
* Fast processing speed&lt;br /&gt;
&lt;br /&gt;
Use SQLGate to maximize your productivity!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface. It comes in two editions - Standard and Express (free).&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
* SQL Development&lt;br /&gt;
* Database Explorer&lt;br /&gt;
* Data Editor&lt;br /&gt;
* Data Export and Import&lt;br /&gt;
* Pivot Table&lt;br /&gt;
* Master-Detail Browser&lt;br /&gt;
* Data Reports&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or proprietary license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Replicator Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/replicator&lt;br /&gt;
&lt;br /&gt;
Replicator allows table data comparison and sync - even with heterogeneous databases. It is unique in the fact it can replicate changes only even if source is non-relational (CSV, DBF, Excel documents, Paradox...). Replicator has a built-in scheduler for easy periodic change replication.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
=== Database Tour Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.databasetour.net&lt;br /&gt;
&lt;br /&gt;
Database Tour Pro is a database tool with built-in report builder for Windows. It works with different types of relational databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Creating tables.&lt;br /&gt;
* Viewing and editing data.&lt;br /&gt;
* Several ways to print data.&lt;br /&gt;
* Built-in report engine and visual report designer with templates, expressions, preview etc.&lt;br /&gt;
* Expression builder for report and export expressions.&lt;br /&gt;
* Building and executing SQL queries. Support for execution of multi statement SQL scripts. Syntax highlighting in SQL editor. Support for parameterized SQL queries.&lt;br /&gt;
* Enhanced database grids, which allow to view and manipulate the data in the most convenient way, including sorting by clicking column header, changing row heights, resizing columns etc.&lt;br /&gt;
* Command line support for executing queries, opening tables, export-import operations, loading reports etc. with logging the performed operations.&lt;br /&gt;
* Searching and replacing text in database with ability to choose fields, record range etc.&lt;br /&gt;
* Importing data to table from another table or a query.&lt;br /&gt;
* Exporting data from open table or query to file(s) like text, CSV, HTML, XLSX, XML, RTF, DBF or to another relational database.&lt;br /&gt;
* Copying data to clipboard.&lt;br /&gt;
* Viewing and editing Blob data, such as large text and graphics.&lt;br /&gt;
* Tools for editing text fields (trimming, changing case of symbols, replacing text).&lt;br /&gt;
* Customized data view (font, background).&lt;br /&gt;
* Conditional formatting data in database grids and reports.&lt;br /&gt;
* Ability to control transactions.&lt;br /&gt;
&lt;br /&gt;
=== Reportizer ===&lt;br /&gt;
&lt;br /&gt;
https://www.reportizer.net&lt;br /&gt;
&lt;br /&gt;
Reportizer is a database reporting tool, which allows easy creating, modifying, and printing database reports from different types of databases, including PostgreSQL. Reports can be edited in convenient visual report builder or in text mode. It supports calculating fields, multi-column reports, expressions, grouping, displaying images etc. Reportizer can export reports to HTML, XLSX, image, or internal format. There is an ability to load and print reports from command line. Reportizer allows to manage report collections, which can be held either in files or in database tables.&lt;br /&gt;
&lt;br /&gt;
=== Exportizer Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.vlsoftware.net/exportizer-pro/&lt;br /&gt;
&lt;br /&gt;
Exportizer Pro is a database export tool, which can work with PostgreSQL database either as source or destination. It allows to export data to database, file, clipboard, or printer.&lt;br /&gt;
* Possible sources: ODBC data sources, files of DB (Paradox), DBF (dBase, FoxPro), MDB, ACCDB, XLS, XLSX, GDB, IB, FDB, HTML, UDL, DBC, TXT, CSV types, databases specified by ADO connection strings, and databases like Oracle, SQL Server, Postgresql, DB2, Informix, SQLite, Interbase etc.&lt;br /&gt;
* Possible destinations: file formats like text, CSV, XLS, XLSX, RTF, XML, HTML, PDF, DBF, SLK, SQL script, and relational database of any supported type.&lt;br /&gt;
* It is possible to export all or selected tables from an open database at once.&lt;br /&gt;
* Exportizer Pro can automatically detect the most known image types (JPEG, PNG, GIF, BMP, ICO) in BLOB fields and export them, for example, to HTML or XLSX.&lt;br /&gt;
* There is an ability to specify the source-to-target field mappings.&lt;br /&gt;
* Export operations can be performed either via the program interface or via command line.&lt;br /&gt;
&lt;br /&gt;
=== TiCodeX SQL Schema Compare ===&lt;br /&gt;
&lt;br /&gt;
https://www.ticodex.com/&lt;br /&gt;
&lt;br /&gt;
TiCodeX SQL Schema Compare is a tools that allows database administrators to compare multiple database schema in order to manage versioning.&amp;lt;br/&amp;gt;&lt;br /&gt;
The software runs on Windows, Linux and Mac and supports Microsoft SQL (MS-SQL), MySQL, PostgreSQL, Azure SQL and MS-SQL on Amazon RDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key Features:&#039;&#039;&#039;&lt;br /&gt;
* Runs on Windows, Linux and MacOS&lt;br /&gt;
* Localized in English, German and Italian&lt;br /&gt;
* Compare changes between two SQL Database schemas (as example from development to test to production)&lt;br /&gt;
* View database differences and explore schema changes to see what&#039;s going on&lt;br /&gt;
* Automatically create full database migration scripts&lt;br /&gt;
* Securely save database and server login details&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
pgMustard is a performance tool for PostgreSQL that provides a user interface for your EXPLAIN ANALYSE output, as well as tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Quickly see the slowest operations&lt;br /&gt;
* Code snippets to tie operations back to the query&lt;br /&gt;
* Tips to speed up your query💡&lt;br /&gt;
* Does the arithmetic for you (including wall clock times)&lt;br /&gt;
* Explanations of operation types and key concepts&lt;br /&gt;
* Links to relevant documentation and blog posts&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
* JSON format plans&lt;br /&gt;
* Any supported version of PostgreSQL&lt;br /&gt;
* English language only&lt;br /&gt;
* Web application, no installation required&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=List_of_drivers&amp;diff=33349</id>
		<title>List of drivers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=List_of_drivers&amp;diff=33349"/>
		<updated>2019-04-16T02:57:58Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Drivers =&lt;br /&gt;
&lt;br /&gt;
The list below are PostgreSQL drivers (also referred to as &amp;quot;client libraries&amp;quot;) that developers can use to [https://www.postgresql.org/docs/current/protocol.html interface with PostgreSQL] from various programming languages. The list is alphabetized by programming language, and also indicates if the driver is based on [https://www.postgresql.org/docs/current/libpq.html libpq] and whether or not it supports the [https://www.postgresql.org/docs/current/sasl-authentication.html#SASL-SCRAM-SHA-256 SCRAM-SHA-256] authentication protocol that was added in [https://www.postgresql.org/docs/release/10.0/ PostgreSQL 10].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The drivers listed below are in various states of development. Some of them have been stable for many years and have been proven in various environments, whereas others are in early development. This listed is strictly informational: it is up to you to select the driver that is best for your environment.&lt;br /&gt;
&lt;br /&gt;
If you would like to add additional drivers to the list, please add them in alphabetical order based on the programming language for the driver.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Driver&lt;br /&gt;
!Language&lt;br /&gt;
!uses libpq?&lt;br /&gt;
!Supports SCRAM?&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.postgresql.org/docs/current/static/libpq.html libpq]&lt;br /&gt;
|C&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://odbc.postgresql.org ODBC]&lt;br /&gt;
|C&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://pqxx.org/development/libpqxx/ libpqxx]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://doc.qt.io/qt-5/sql-driver.html#qpsql QPSQL]&lt;br /&gt;
|C++ (Qt)&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/dmitigr/pgfe pgfe]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/yandex/ozo OZO]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.npgsql.org npgsql]&lt;br /&gt;
|C#&lt;br /&gt;
|No&lt;br /&gt;
|Yes, as of 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/will/crystal-pg crystal-pg]&lt;br /&gt;
|Crystal&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/elixir-ecto/postgrex Postgrex]&lt;br /&gt;
|Elixir&lt;br /&gt;
|No&lt;br /&gt;
|Yes, as of 0.14.0&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/anse1/emacs-libpq emacs-libpq]&lt;br /&gt;
|Emacs Lisp&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/epgsql/epgsql epgsql]&lt;br /&gt;
|Erlang&lt;br /&gt;
|No&lt;br /&gt;
|Yes [https://github.com/epgsql/epgsql/issues/142]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/lib/pq github.com/lib/pq]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|Yes, since 1.1.0&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/jackc/pgx pgx]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/go-pg/pg go-pg]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|Yes, since 6.15&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/hdbc/hdbc-postgresql/wiki HDBC]&lt;br /&gt;
|Haskell&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://hackage.haskell.org/package/postgresql-simple postgresql-simple]&lt;br /&gt;
|Haskell&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://jdbc.postgresql.org/ JDBC]&lt;br /&gt;
|Java&lt;br /&gt;
|No&lt;br /&gt;
|Yes, as of 42.2.0.&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/brianc/node-postgres node-postgres]&lt;br /&gt;
|JavaScript&lt;br /&gt;
|Optional&lt;br /&gt;
| Yes [https://github.com/brianc/node-postgres/pull/1835], from 7.9.0&lt;br /&gt;
|-&lt;br /&gt;
|[https://metacpan.org/release/DBD-Pg DBD::Pg]&lt;br /&gt;
|Perl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.php.net/manual/en/book.pgsql.php php-pgsql]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.php.net/manual/en/ref.pdo-pgsql.php PDO_PGSQL]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/m6w6/ext-pq ext-pq]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pomm-project.org/ Pomm]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://initd.org/psycopg/ psycopg2]&lt;br /&gt;
|Python (CPython only)&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/MagicStack/asyncpg asyncpg]&lt;br /&gt;
|Python&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; [https://github.com/MagicStack/asyncpg/issues/314]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/chtd/psycopg2cffi psycopg2cffi]&lt;br /&gt;
|Python, PyPi&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://cran.r-project.org/package=RPostgreSQL RPostgreSQL]&lt;br /&gt;
|R&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://rubyforge.org/projects/ruby-pg ruby-pg]&lt;br /&gt;
|Ruby&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/sfackler/rust-postgres rust-postgres]&lt;br /&gt;
|Rust&lt;br /&gt;
|No&lt;br /&gt;
|Yes [https://github.com/sfackler/rust-postgres/commit/11ffcac087fef8907dd5cdfc3c082ff13f76557b]&lt;br /&gt;
|-&lt;br /&gt;
|[https://flightaware.github.io/Pgtcl/ Pgtcl]&lt;br /&gt;
|Tcl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://sourceforge.net/projects/pgtclng/ pgtclng]&lt;br /&gt;
|Tcl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unsupported Drivers ==&lt;br /&gt;
&lt;br /&gt;
Below is a list of drivers that are no longer maintained.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Driver&lt;br /&gt;
!Language&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/sshirokov/CLSQL CLSQL]&lt;br /&gt;
|Common Lisp&lt;br /&gt;
|-&lt;br /&gt;
|[http://marijnhaverbeke.nl/postmodern/ Postmodern]&lt;br /&gt;
|Common Lisp&lt;br /&gt;
|-&lt;br /&gt;
|[http://frihjul.net/pgsql pgsql]&lt;br /&gt;
|Erlang&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/erlang-psql-driver/ erlang-psql-driver]&lt;br /&gt;
|Erlang&lt;br /&gt;
|-&lt;br /&gt;
|[https://metacpan.org/pod/release/ARC/DBD-PgPP-0.08/lib/DBD/PgPP.pm PgPP]&lt;br /&gt;
|Perl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org/download/products/2 Software catalog list]&lt;br /&gt;
&lt;br /&gt;
[[Category: Language interface|!]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=List_of_drivers&amp;diff=33347</id>
		<title>List of drivers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=List_of_drivers&amp;diff=33347"/>
		<updated>2019-04-15T18:09:30Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Drivers =&lt;br /&gt;
&lt;br /&gt;
The list below are PostgreSQL drivers (also referred to as &amp;quot;client libraries&amp;quot;) that developers can use to [https://www.postgresql.org/docs/current/protocol.html interface with PostgreSQL] from various programming languages. The list is alphabetized by programming language, and also indicates if the driver is based on [https://www.postgresql.org/docs/current/libpq.html libpq] and whether or not it supports the [https://www.postgresql.org/docs/current/sasl-authentication.html#SASL-SCRAM-SHA-256 SCRAM-SHA-256] authentication protocol that was added in [https://www.postgresql.org/docs/release/10.0/ PostgreSQL 10].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The drivers listed below are in various states of development. Some of them have been stable for many years and have been proven in various environments, whereas others are in early development. This listed is strictly informational: it is up to you to select the driver that is best for your environment.&lt;br /&gt;
&lt;br /&gt;
If you would like to add additional drivers to the list, please add them in alphabetical order based on the programming language for the driver.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Driver&lt;br /&gt;
!Language&lt;br /&gt;
!uses libpq?&lt;br /&gt;
!Supports SCRAM?&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.postgresql.org/docs/current/static/libpq.html libpq]&lt;br /&gt;
|C&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://odbc.postgresql.org ODBC]&lt;br /&gt;
|C&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://pqxx.org/development/libpqxx/ libpqxx]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://doc.qt.io/qt-5/sql-driver.html#qpsql QPSQL]&lt;br /&gt;
|C++ (Qt)&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/dmitigr/pgfe pgfe]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/yandex/ozo OZO]&lt;br /&gt;
|C++&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.npgsql.org npgsql]&lt;br /&gt;
|C#&lt;br /&gt;
|No&lt;br /&gt;
|Yes from version 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/will/crystal-pg crystal-pg]&lt;br /&gt;
|Crystal&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/elixir-ecto/postgrex Postgrex]&lt;br /&gt;
|Elixir&lt;br /&gt;
|No&lt;br /&gt;
|Yes, from version 0.14.0&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/anse1/emacs-libpq emacs-libpq]&lt;br /&gt;
|Emacs Lisp&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/epgsql/epgsql epgsql]&lt;br /&gt;
|Erlang&lt;br /&gt;
|No&lt;br /&gt;
|Yes [https://github.com/epgsql/epgsql/issues/142]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/lib/pq github.com/lib/pq]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/jackc/pgx pgx]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/go-pg/pg go-pg]&lt;br /&gt;
|Go&lt;br /&gt;
|No&lt;br /&gt;
|Yes, since 6.15&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/hdbc/hdbc-postgresql/wiki HDBC]&lt;br /&gt;
|Haskell&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://hackage.haskell.org/package/postgresql-simple postgresql-simple]&lt;br /&gt;
|Haskell&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://jdbc.postgresql.org/ JDBC]&lt;br /&gt;
|Java&lt;br /&gt;
|No&lt;br /&gt;
|Yes, from version 42.2.0.&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/brianc/node-postgres node-postgres]&lt;br /&gt;
|JavaScript&lt;br /&gt;
|Optional&lt;br /&gt;
| Yes [https://github.com/brianc/node-postgres/pull/1835], from 7.9.0&lt;br /&gt;
|-&lt;br /&gt;
|[https://metacpan.org/release/DBD-Pg DBD::Pg]&lt;br /&gt;
|Perl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.php.net/manual/en/book.pgsql.php php-pgsql]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.php.net/manual/en/ref.pdo-pgsql.php PDO_PGSQL]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/m6w6/ext-pq ext-pq]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pomm-project.org/ Pomm]&lt;br /&gt;
|PHP&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://initd.org/psycopg/ psycopg2]&lt;br /&gt;
|Python (CPython only)&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/MagicStack/asyncpg asyncpg]&lt;br /&gt;
|Python&lt;br /&gt;
|No&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; [https://github.com/MagicStack/asyncpg/issues/314]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/chtd/psycopg2cffi psycopg2cffi]&lt;br /&gt;
|Python, PyPi&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://cran.r-project.org/package=RPostgreSQL RPostgreSQL]&lt;br /&gt;
|R&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://rubyforge.org/projects/ruby-pg ruby-pg]&lt;br /&gt;
|Ruby&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/sfackler/rust-postgres rust-postgres]&lt;br /&gt;
|Rust&lt;br /&gt;
|No&lt;br /&gt;
|Yes [https://github.com/sfackler/rust-postgres/commit/11ffcac087fef8907dd5cdfc3c082ff13f76557b]&lt;br /&gt;
|-&lt;br /&gt;
|[https://flightaware.github.io/Pgtcl/ Pgtcl]&lt;br /&gt;
|Tcl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|[http://sourceforge.net/projects/pgtclng/ pgtclng]&lt;br /&gt;
|Tcl&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unsupported Drivers ==&lt;br /&gt;
&lt;br /&gt;
Below is a list of drivers that are no longer maintained.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Driver&lt;br /&gt;
!Language&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/sshirokov/CLSQL CLSQL]&lt;br /&gt;
|Common Lisp&lt;br /&gt;
|-&lt;br /&gt;
|[http://marijnhaverbeke.nl/postmodern/ Postmodern]&lt;br /&gt;
|Common Lisp&lt;br /&gt;
|-&lt;br /&gt;
|[http://frihjul.net/pgsql pgsql]&lt;br /&gt;
|Erlang&lt;br /&gt;
|-&lt;br /&gt;
|[http://code.google.com/p/erlang-psql-driver/ erlang-psql-driver]&lt;br /&gt;
|Erlang&lt;br /&gt;
|-&lt;br /&gt;
|[https://metacpan.org/pod/release/ARC/DBD-PgPP-0.08/lib/DBD/PgPP.pm PgPP]&lt;br /&gt;
|Perl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org/download/products/2 Software catalog list]&lt;br /&gt;
&lt;br /&gt;
[[Category: Language interface|!]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33318</id>
		<title>GSoC 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33318"/>
		<updated>2019-04-13T16:54:09Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting ideas for future Summer of Code projects.&lt;br /&gt;
&lt;br /&gt;
== Regarding Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Project ideas are to be added here by community members.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Google wants each idea to be supported by a few sentences and then a list of skills/reqs, difficulty level, potential mentors, expected outcomes, etc.  Please add sections in this format.&lt;br /&gt;
&lt;br /&gt;
== Mentors (2019) ==&lt;br /&gt;
&lt;br /&gt;
The following individuals have been listed as possible mentors on the below projects, and/or offered to be mentors for student-proposed projects:&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
* Andrey Borodin&lt;br /&gt;
* Vladimir Leskov&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Andreas Scherbaum&lt;br /&gt;
* Mark Wong&lt;br /&gt;
&lt;br /&gt;
== WAL-G safety features (2019) ==&lt;br /&gt;
&lt;br /&gt;
===== Project Description =====&lt;br /&gt;
WAL-G is the simple backup tool for PostgreSQL. Essentially, it supports backup and WAL archiving to cloud storages. WAL-G repository. Currently, we want to improve backup storing. To be more precise, we would like to see implemented following features:&lt;br /&gt;
* Retention policy improvement -- currently, we can only delete everything before specified backup or retain fix number of backups. We want to improve backup management, E.g. give user ability to mark important backup permanent to avoid its deletion.&lt;br /&gt;
* WAL&#039;s history consistency check -- we want to ensure, that we can provide PITR (point in time recovery) for the user.&lt;br /&gt;
* Page checksum verification -- it&#039;s one of the key features needed for backup verification.&lt;br /&gt;
&lt;br /&gt;
===== Skills needed =====&lt;br /&gt;
* Go language&lt;br /&gt;
* Ability to read technical papers and documentation to understand PostgreSQL inner structure.&lt;br /&gt;
===== Difficulty level =====&lt;br /&gt;
Moderate&lt;br /&gt;
&lt;br /&gt;
===== Potential Mentors =====&lt;br /&gt;
* Andrey Borodin can mentor. Andrey is WAL-G developer and PostgreSQL contributor.&lt;br /&gt;
* Vladimir Leskov can mentor. Vladimir is WAL-G developer.&lt;br /&gt;
&lt;br /&gt;
===== Expected Outcomes =====&lt;br /&gt;
All before mentioned features properly implemented, covered with tests and Pull-Requested to WAL-G.&lt;br /&gt;
&lt;br /&gt;
== GiST API advancement (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
GiST API was designed at the beginning of 90th to reduce boilerplate code around data access methods over a balanced tree. Now, after 30 years, there are some ideas on improving this API.&lt;br /&gt;
&lt;br /&gt;
Opclass developer must specify 4 core operations to make a type GiST-indexable:&lt;br /&gt;
&lt;br /&gt;
1. Split: a function to split set of datatype instances into two parts.&lt;br /&gt;
&lt;br /&gt;
2. Penalty calculation: a function to measure penalty for unification of two keys.&lt;br /&gt;
&lt;br /&gt;
3. Collision check: a function which determines whether two keys may have overlap or are not intersecting.&lt;br /&gt;
&lt;br /&gt;
4. Unification: a function to combine two keys into one so that combined key collides with both input keys.&lt;br /&gt;
&lt;br /&gt;
Functions 2 and 3 can be improved.&lt;br /&gt;
&lt;br /&gt;
For example, Revised R*-tree[1] algorithm of insertion cannot be expressed in terms of penalty-based algorithms. There were some attempts to bring parts of RR*-tree insertion, but they come down to ugly hacks [2]. Current GiST API, due to penalty-based insertion algorithm, does not allow to implement an important feature of RR*-tree: overlap optimization. As Norbert Beckman, author of RR*-tree, put it in the discussion: “Overlap optimization is one of the main elements, if not the main query performance tuning element of the RR*-tree. You would fall back to old R-Tree times if that would be left off.”&lt;br /&gt;
&lt;br /&gt;
Collision check currently returns a binary result:&lt;br /&gt;
&lt;br /&gt;
1.       Query may be collides with subtree MBR&lt;br /&gt;
&lt;br /&gt;
2.       Query do not collides with subtree&lt;br /&gt;
&lt;br /&gt;
This result may be augmented with a third state: subtree is totally within the query. In this case, GiST scan can scan down subtree without key checks.&lt;br /&gt;
&lt;br /&gt;
The potential effect of these improvements must be benchmarked. Probably, implementation of these two will spawn more ideas on GiST performance improvements.&lt;br /&gt;
&lt;br /&gt;
Another feature of RR*-tree is storing in the page additional MBR.  Such additional MBR covers all the entries MBRs just after page creation but don&#039;t updated afterwards.  Then, when this page is being split, such additional MBR could be used to select better split ration, and in turn in order to have better space utilization.  Currently GiST doesn&#039;t allow to store some additional datum per page, but it would be nice to have.&lt;br /&gt;
&lt;br /&gt;
Finally, GiST do not provide API for bulk loading. Alexander Korotkov during GSoC 2011 implemented buffered GiST build. This index construction is faster, but yields the index tree with virtually same querying performance. There are different algorithms aiming to provide better indexing tree due to some knowledge of data, e.g. [3]&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
*ability to understand searches within GiST&lt;br /&gt;
*ability to describe and set up datasets for performance features demostration&lt;br /&gt;
*ability to produce committable patch&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Easy&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are the benchmark for API features and committable patch implementing them.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
[1] Beckmann, Norbert, and Bernhard Seeger. &amp;quot;A revised r*-tree in comparison with related index structures.&amp;quot; Proceedings of the 2009 ACM SIGMOD International Conference on Management of data. ACM, 2009.&lt;br /&gt;
&lt;br /&gt;
[2] https://www.postgresql.org/message-id/flat/CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg%40mail.gmail.com#CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg@mail.gmail.com&lt;br /&gt;
&lt;br /&gt;
[3] Achakeev, Daniar, Bernhard Seeger, and Peter Widmayer. https://www.mathematik.uni-marburg.de/~achakeye/publications/sortBasedLoading.pdf Proceedings of the 21st ACM international conference on Information and knowledge management. ACM, 2012.&lt;br /&gt;
&lt;br /&gt;
== TOAST&#039;ing in slices (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
The best approach to slicing a given value will likely depend on the data type.  A text field, for example, would most likely be naturally split upon character (not byte) boundaries, while an array data type would likely be split upon its element boundary.  A JSON document might be split in another way (presumably based on how a JSONB is structured).  A possible additional task would be to consider if it&#039;s possible to include in an index the information about which keys or values exist in a given TOAST chunk.  For the JSONB case, in particular, one can imagine that it would eventually be possible to extract out just the JSON chunks which have the key or value being searched for.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand complex on-disk data structures&lt;br /&gt;
* Ability to understand inverted indexing&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Moderate-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements the ability to split up a single value into known-sized pre-compressed chunks which are then stored in TOAST, and functions able to be optimized based on that knowledge.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== de-TOAST&#039;ing using an iterator (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
This project would aim to provide the ability to de-TOAST a fully TOAST&#039;d and compressed field using an iterator, and then update the appropriate parts of the code to use the iterator where possible instead of de-TOAST&#039;ing and de-compressing the entire value.  Examples where this can be helpful include using substring() from the beginning of the value, or doing a pattern or substring match.  This is distinct and simpler than the above project which envisions a larger change to the TOAST system.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Easy-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements de-TOAST&#039;ing a value using an iterator and then updates to the other parts of the code to use that iterator, resulting in a significant performance improvements for certain queries.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Improve PostgreSQL Regression Test Coverage (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage for PostgreSQL isn&#039;t great, to the point where some areas of the code are covered only at single-digit-percent levels.&lt;br /&gt;
&lt;br /&gt;
Having good regression tests for such an important project as PostgreSQL is really key to minimizing the chance that any regressions are introduced.  While this might seem like a small project, it isn&#039;t, particularly when it comes to PostgreSQL.  PostgreSQL is over 1.3M lines of code and some of the code paths can be tricky to reach.&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage can be see here: https://coverage.postgresql.org&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s build system includes a &amp;quot;make coverage-html&amp;quot; to generate the report.&lt;br /&gt;
&lt;br /&gt;
Please note that this project involves writing SQL code and Perl code, at a minimum, to implement the tests necessary to increase the code coverage of the PostgreSQL regression tests.  This is not a small task as PostgreSQL is currently at only about 73% LOC coverage.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Perl, as many PostgreSQL regression tests are written using the Perl TAP system and new ones will likely need to be.&lt;br /&gt;
* SQL, to craft tests that hit certain code paths&lt;br /&gt;
* Ability to read C code enough to work through a way to get a particular line or lines of code tested.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
For someone with the skills listed, even at a relatively beginner level, should make this a very straight-forward if tedious project.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer and has been working on improving regression tests in PG for quite a while.&lt;br /&gt;
* Andreas Scherbaum can mentor.  Andreas mentored GSoC and Code-In in the past, and in general helps boosting PostgreSQL in Europe.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Significantly improved code coverage for the PostgreSQL regression test suite, ie: 73% -&amp;gt; 80%.&lt;br /&gt;
&lt;br /&gt;
==Enhancing amcheck for all AMs (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Amcheck is a PostgreSQL extension to verify the integrity of index against invariants that should always hold in the valid index. This tool is designed to diagnose corruption and help developers during the implementation of new features in access methods. Currently, amcheck supports only B-tree. Also, work on GiST is in progress https://github.com/petergeoghegan/amcheck/pull/11&lt;br /&gt;
But amcheck could be used for many other indexes: GIN, SP-GiST, BRIN, RUM.&lt;br /&gt;
For each AM it is necessary to deduce invariants to check, implement this checks and test against various index states.&lt;br /&gt;
Also, it would be useful to unite all AM check methods in a single entry point for checking index.&lt;br /&gt;
The interface of check functions can also be enhanced in favor of more detailed corruption information. It would be useful to model various corruptions, including both those which can be found by data_checksums and those which cannot.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Good C code skills&lt;br /&gt;
* Understanging of access methods ideas and details&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project requires to grasp algorithms behind very sophisticated data structures, along with concurrency and recovery over them.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor. Peter Geoghegan can consult team on controversial cases. Peter Geoghegan is the original author of amcheck.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Support for all major PostgreSQL AMs in amcheck.&lt;br /&gt;
&lt;br /&gt;
==Develop Performance Farm Database and Website (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Performance Farm project is a community project to collect performance data from tests as code changes are made to PostgreSQL.  To support this effort, a database needs to be created for storing results, and a Web site developed to review results.  This project will focus on developing the Web site on top of the database.&lt;br /&gt;
&lt;br /&gt;
The database will be using PostgreSQL in the back-end.  Test results will come in the form of JSON and flat files.  The Web application will be developed using the Django Web framework.&lt;br /&gt;
&lt;br /&gt;
For reference, the code that will be supplying test results is https://git.postgresql.org/gitweb/?p=pgperffarm.git;a=summary.&lt;br /&gt;
&lt;br /&gt;
As an example, the PostgreSQL Build Farm site [1] is a central repository for the results of testing source code changes for PostgreSQL as they occur, on a wide variety of platforms.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python programming&lt;br /&gt;
* SQL programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
This project requires familiarity with Python programming and basic database experience.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Mark Wong can mentor.&lt;br /&gt;
* Andreas Scherbaum can mentor.&lt;br /&gt;
* Pavan Agrawal can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* A functional Web site where clients can upload test results, and users can search and review uploaded results.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://buildfarm.postgresql.org/&lt;br /&gt;
&lt;br /&gt;
==Read/write transaction-level routing in Odyssey (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Odyssey is an advanced multi-threaded PostgreSQL connection pooler and request router.&lt;br /&gt;
Odyssey allows defining client routing rules by specifying client database, client user name and storage connection. In some HA scenarios, it is necessary to define different routing for read-only and read-write transactions.&lt;br /&gt;
Odyssey can parse transaction opening statements and assign different routes depending on transaction types.&lt;br /&gt;
&lt;br /&gt;
It would be cool to support many consistency models for reads on standby:&lt;br /&gt;
1. Redirecting read query on standby only if standby is lagging no more than X seconds&lt;br /&gt;
2. Redirecting read query on standby unless there was recent write (writer should see his writes)&lt;br /&gt;
3. Redirecting some read queries on syn or async standby&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Pull request to Odyssey with described feature&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/yandex/odyssey&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool Graphing (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin has a GIS Viewer built into it&#039;s Query Tool as the result of a 2018 GSoC Project, that allows the user to render PostGIS shapes and points etc. and view them on a plain canvas or over one of a number of map sources.&lt;br /&gt;
&lt;br /&gt;
This project would be to add a similar capability to allow the user to plot query results in graph formats, for example, selecting column(s) to view on the X/Y axis and then rendering the output as a line chart, bar chart, or even a pie chart.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool bytea support (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently doesn&#039;t render bytea data in its Query Tool, or allow options to update such columns. This project would have 2 core aims:&lt;br /&gt;
&lt;br /&gt;
* Update the Query Tool to enable bytea data to be uploaded when editing a row.&lt;br /&gt;
* Add viewers to the Query Tool output grid such that when it can be detected that the data in a field is of a known type (image, sound or video file), a button can be displayed in the grid that when clicked will display or play the media.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool automatic mode detection (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently works in 2 different modes:&lt;br /&gt;
&lt;br /&gt;
* View Data mode allows modifications to the SQL Query only through the UI, but allows editing of data when used with a table with an appropriate primary key.&lt;br /&gt;
* Query mode allows arbitrary queries to be written and executed, but the user cannot edit the results.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to automatically detect if the query entered will produce in an updatable resultset and enable/disable editing of the results and other parts of the UI as appropriate (for example, disabling the sort/filter UI options if the query string is not one that can be programmatically changed).&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
High.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgBackRest port to Windows (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgBackRest is being reimplemented into C currently and it is well on its way.  There is already enough of the code in C that it&#039;s time to start working on porting pgBackRest to Windows.  This project would aim to have all of the C code ported to Windows, which would also include some changes in how pgBackRest operates.  The necessary changes for running pgBackRest on Windows have been contemplated during the architecture and design of pgBackRest and therefore should be reasonably straight-forward to implement.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C&lt;br /&gt;
* Working in a Windows development environment&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Medium.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* pgBackRest able to be built and run on Windows.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgbackrest.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/pgbackrest&lt;br /&gt;
&lt;br /&gt;
==Extract scanning strategy to the separate entity from GiST/GIN/SP-GiST opclasses (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL offers great indexing extensibility.  It supports index access methods which are templates for particular kinds of indexes.  Opclasses specify application of access method to particular data type.  There could be multiple opclasses for same access method and data type with different capabilities.  Moreover, since PostgreSQL 9.6+ index access methods could be user-defined themselves.&lt;br /&gt;
&lt;br /&gt;
However, there are still shortcomings in this extendability system.  Opclass specifies particular kind of index and its scanning strategies.  One problem is that scanning strategies of opclass can&#039;t be extended.  For instance, extension could add more spatial operators to built-in GiST opclasses for geometrical datatypes; or fuzzy string matching operators to build-in SP-GiST opclass for text (radix tree).  In order to overcome such shortcoming we need to make a scanning strategy a separate entity.  Such entity should contain search/order by operators itself as well as corresponding supporting functions such as:&lt;br /&gt;
&lt;br /&gt;
* consistent, distance for GiST,&lt;br /&gt;
* inner_consistent and leaf_consistent for SP-GiST,&lt;br /&gt;
* extractQuery, consistent, triConsistent and comparePartial for GIN.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* The ability to read technical papers and documentation to understand index access methods extendability&lt;br /&gt;
** http://minds.wisconsin.edu/bitstream/handle/1793/59976/TR1274.pdf&lt;br /&gt;
** http://zeus.sai.msu.ru/~megera/postgres/gist/papers/csd-97-950.pdf&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/spgist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gin.html&lt;br /&gt;
* Ability to refactor system catalog, to find the appropriate places in each of the index AMs to use new entities.  Therefore, the ability to navigate over functionality scattered among large and complex project.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project is difficult from the implementation side, because it requires consistent modification of many places in the source code.  Design question doesn&#039;t seem to be hard tough.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is a major contributor and committer.&lt;br /&gt;
* Oleg Bartunov can mentor.  Oleg is a major contributor.&lt;br /&gt;
* Teodor Sigaev can mentor. Teodor is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
The expected outcome is ability of extensions to add new extensions to existing opclasses.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33317</id>
		<title>GSoC 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33317"/>
		<updated>2019-04-13T16:52:19Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Project Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting ideas for future Summer of Code projects.&lt;br /&gt;
&lt;br /&gt;
== Regarding Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Project ideas are to be added here by community members.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Google wants each idea to be supported by a few sentences and then a list of skills/reqs, difficulty level, potential mentors, expected outcomes, etc.  Please add sections in this format.&lt;br /&gt;
&lt;br /&gt;
== Mentors (2019) ==&lt;br /&gt;
&lt;br /&gt;
The following individuals have been listed as possible mentors on the below projects, and/or offered to be mentors for student-proposed projects:&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
* Andrey Borodin&lt;br /&gt;
* Vladimir Leskov&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Andreas Scherbaum&lt;br /&gt;
* Mark Wong&lt;br /&gt;
&lt;br /&gt;
== WAL-G safety features (2019) ==&lt;br /&gt;
&lt;br /&gt;
===== Project Description =====&lt;br /&gt;
WAL-G is the simple backup tool for PostgreSQL. Essentially, it supports backup and WAL archiving to cloud storages. WAL-G repository. Currently, we want to improve backup storing. To be more precise, we would like to see implemented following features:&lt;br /&gt;
* Retention policy improvement -- currently, we can only delete everything before specified backup or retain fix number of backups. We want to improve backup management, E.g. give user ability to mark important backup permanent to avoid its deletion.&lt;br /&gt;
* WAL&#039;s history consistency check -- we want to ensure, that we can provide PITR (point in time recovery) for the user.&lt;br /&gt;
* Page checksum verification -- it&#039;s one of the key features needed for backup verification.&lt;br /&gt;
&lt;br /&gt;
===== Skills needed =====&lt;br /&gt;
* Go language&lt;br /&gt;
* Ability to read technical papers and documentation to understand PostgreSQL inner structure.&lt;br /&gt;
===== Difficulty level =====&lt;br /&gt;
Moderate&lt;br /&gt;
&lt;br /&gt;
===== Potential Mentors =====&lt;br /&gt;
* Andrey Borodin can mentor. Andrey is WAL-G developer and PostgreSQL contributor.&lt;br /&gt;
* Vladimir Leskov can mentor. Vladimir is WAL-G developer.&lt;br /&gt;
&lt;br /&gt;
===== Expected Outcomes =====&lt;br /&gt;
All before mentioned features properly implemented, covered with tests and Pull-Requested to WAL-G.&lt;br /&gt;
&lt;br /&gt;
== GiST API advancement (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
GiST API was designed at the beginning of 90th to reduce boilerplate code around data access methods over a balanced tree. Now, after 30 years, there are some ideas on improving this API.&lt;br /&gt;
&lt;br /&gt;
Opclass developer must specify 4 core operations to make a type GiST-indexable:&lt;br /&gt;
&lt;br /&gt;
1. Split: a function to split set of datatype instances into two parts.&lt;br /&gt;
&lt;br /&gt;
2. Penalty calculation: a function to measure penalty for unification of two keys.&lt;br /&gt;
&lt;br /&gt;
3. Collision check: a function which determines whether two keys may have overlap or are not intersecting.&lt;br /&gt;
&lt;br /&gt;
4. Unification: a function to combine two keys into one so that combined key collides with both input keys.&lt;br /&gt;
&lt;br /&gt;
Functions 2 and 3 can be improved.&lt;br /&gt;
&lt;br /&gt;
For example, Revised R*-tree[1] algorithm of insertion cannot be expressed in terms of penalty-based algorithms. There were some attempts to bring parts of RR*-tree insertion, but they come down to ugly hacks [2]. Current GiST API, due to penalty-based insertion algorithm, does not allow to implement an important feature of RR*-tree: overlap optimization. As Norbert Beckman, author of RR*-tree, put it in the discussion: “Overlap optimization is one of the main elements, if not the main query performance tuning element of the RR*-tree. You would fall back to old R-Tree times if that would be left off.”&lt;br /&gt;
&lt;br /&gt;
Collision check currently returns a binary result:&lt;br /&gt;
&lt;br /&gt;
1.       Query may be collides with subtree MBR&lt;br /&gt;
&lt;br /&gt;
2.       Query do not collides with subtree&lt;br /&gt;
&lt;br /&gt;
This result may be augmented with a third state: subtree is totally within the query. In this case, GiST scan can scan down subtree without key checks.&lt;br /&gt;
&lt;br /&gt;
The potential effect of these improvements must be benchmarked. Probably, implementation of these two will spawn more ideas on GiST performance improvements.&lt;br /&gt;
&lt;br /&gt;
Another feature of RR*-tree is storing in the page additional MBR.  Such additional MBR covers all the entries MBRs just after page creation but don&#039;t updated afterwards.  Then, when this page is being split, such additional MBR could be used to select better split ration, and in turn in order to have better space utilization.  Currently GiST doesn&#039;t allow to store some additional datum per page, but it would be nice to have.&lt;br /&gt;
&lt;br /&gt;
Finally, GiST do not provide API for bulk loading. Alexander Korotkov during GSoC 2011 implemented buffered GiST build. This index construction is faster, but yields the index tree with virtually same querying performance. There are different algorithms aiming to provide better indexing tree due to some knowledge of data, e.g. [3]&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
*ability to understand searches within GiST&lt;br /&gt;
*ability to describe and set up datasets for performance features demostration&lt;br /&gt;
*ability to produce committable patch&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Easy&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are the benchmark for API features and committable patch implementing them.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
[1] Beckmann, Norbert, and Bernhard Seeger. &amp;quot;A revised r*-tree in comparison with related index structures.&amp;quot; Proceedings of the 2009 ACM SIGMOD International Conference on Management of data. ACM, 2009.&lt;br /&gt;
&lt;br /&gt;
[2] https://www.postgresql.org/message-id/flat/CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg%40mail.gmail.com#CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg@mail.gmail.com&lt;br /&gt;
&lt;br /&gt;
[3] Achakeev, Daniar, Bernhard Seeger, and Peter Widmayer. &amp;quot;Sort-based query-adaptive loading of r-trees.&amp;quot; Proceedings of the 21st ACM international conference on Information and knowledge management. ACM, 2012.&lt;br /&gt;
&lt;br /&gt;
== TOAST&#039;ing in slices (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
The best approach to slicing a given value will likely depend on the data type.  A text field, for example, would most likely be naturally split upon character (not byte) boundaries, while an array data type would likely be split upon its element boundary.  A JSON document might be split in another way (presumably based on how a JSONB is structured).  A possible additional task would be to consider if it&#039;s possible to include in an index the information about which keys or values exist in a given TOAST chunk.  For the JSONB case, in particular, one can imagine that it would eventually be possible to extract out just the JSON chunks which have the key or value being searched for.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand complex on-disk data structures&lt;br /&gt;
* Ability to understand inverted indexing&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Moderate-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements the ability to split up a single value into known-sized pre-compressed chunks which are then stored in TOAST, and functions able to be optimized based on that knowledge.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== de-TOAST&#039;ing using an iterator (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
This project would aim to provide the ability to de-TOAST a fully TOAST&#039;d and compressed field using an iterator, and then update the appropriate parts of the code to use the iterator where possible instead of de-TOAST&#039;ing and de-compressing the entire value.  Examples where this can be helpful include using substring() from the beginning of the value, or doing a pattern or substring match.  This is distinct and simpler than the above project which envisions a larger change to the TOAST system.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Easy-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements de-TOAST&#039;ing a value using an iterator and then updates to the other parts of the code to use that iterator, resulting in a significant performance improvements for certain queries.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Improve PostgreSQL Regression Test Coverage (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage for PostgreSQL isn&#039;t great, to the point where some areas of the code are covered only at single-digit-percent levels.&lt;br /&gt;
&lt;br /&gt;
Having good regression tests for such an important project as PostgreSQL is really key to minimizing the chance that any regressions are introduced.  While this might seem like a small project, it isn&#039;t, particularly when it comes to PostgreSQL.  PostgreSQL is over 1.3M lines of code and some of the code paths can be tricky to reach.&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage can be see here: https://coverage.postgresql.org&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s build system includes a &amp;quot;make coverage-html&amp;quot; to generate the report.&lt;br /&gt;
&lt;br /&gt;
Please note that this project involves writing SQL code and Perl code, at a minimum, to implement the tests necessary to increase the code coverage of the PostgreSQL regression tests.  This is not a small task as PostgreSQL is currently at only about 73% LOC coverage.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Perl, as many PostgreSQL regression tests are written using the Perl TAP system and new ones will likely need to be.&lt;br /&gt;
* SQL, to craft tests that hit certain code paths&lt;br /&gt;
* Ability to read C code enough to work through a way to get a particular line or lines of code tested.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
For someone with the skills listed, even at a relatively beginner level, should make this a very straight-forward if tedious project.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer and has been working on improving regression tests in PG for quite a while.&lt;br /&gt;
* Andreas Scherbaum can mentor.  Andreas mentored GSoC and Code-In in the past, and in general helps boosting PostgreSQL in Europe.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Significantly improved code coverage for the PostgreSQL regression test suite, ie: 73% -&amp;gt; 80%.&lt;br /&gt;
&lt;br /&gt;
==Enhancing amcheck for all AMs (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Amcheck is a PostgreSQL extension to verify the integrity of index against invariants that should always hold in the valid index. This tool is designed to diagnose corruption and help developers during the implementation of new features in access methods. Currently, amcheck supports only B-tree. Also, work on GiST is in progress https://github.com/petergeoghegan/amcheck/pull/11&lt;br /&gt;
But amcheck could be used for many other indexes: GIN, SP-GiST, BRIN, RUM.&lt;br /&gt;
For each AM it is necessary to deduce invariants to check, implement this checks and test against various index states.&lt;br /&gt;
Also, it would be useful to unite all AM check methods in a single entry point for checking index.&lt;br /&gt;
The interface of check functions can also be enhanced in favor of more detailed corruption information. It would be useful to model various corruptions, including both those which can be found by data_checksums and those which cannot.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Good C code skills&lt;br /&gt;
* Understanging of access methods ideas and details&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project requires to grasp algorithms behind very sophisticated data structures, along with concurrency and recovery over them.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor. Peter Geoghegan can consult team on controversial cases. Peter Geoghegan is the original author of amcheck.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Support for all major PostgreSQL AMs in amcheck.&lt;br /&gt;
&lt;br /&gt;
==Develop Performance Farm Database and Website (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Performance Farm project is a community project to collect performance data from tests as code changes are made to PostgreSQL.  To support this effort, a database needs to be created for storing results, and a Web site developed to review results.  This project will focus on developing the Web site on top of the database.&lt;br /&gt;
&lt;br /&gt;
The database will be using PostgreSQL in the back-end.  Test results will come in the form of JSON and flat files.  The Web application will be developed using the Django Web framework.&lt;br /&gt;
&lt;br /&gt;
For reference, the code that will be supplying test results is https://git.postgresql.org/gitweb/?p=pgperffarm.git;a=summary.&lt;br /&gt;
&lt;br /&gt;
As an example, the PostgreSQL Build Farm site [1] is a central repository for the results of testing source code changes for PostgreSQL as they occur, on a wide variety of platforms.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python programming&lt;br /&gt;
* SQL programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
This project requires familiarity with Python programming and basic database experience.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Mark Wong can mentor.&lt;br /&gt;
* Andreas Scherbaum can mentor.&lt;br /&gt;
* Pavan Agrawal can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* A functional Web site where clients can upload test results, and users can search and review uploaded results.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://buildfarm.postgresql.org/&lt;br /&gt;
&lt;br /&gt;
==Read/write transaction-level routing in Odyssey (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Odyssey is an advanced multi-threaded PostgreSQL connection pooler and request router.&lt;br /&gt;
Odyssey allows defining client routing rules by specifying client database, client user name and storage connection. In some HA scenarios, it is necessary to define different routing for read-only and read-write transactions.&lt;br /&gt;
Odyssey can parse transaction opening statements and assign different routes depending on transaction types.&lt;br /&gt;
&lt;br /&gt;
It would be cool to support many consistency models for reads on standby:&lt;br /&gt;
1. Redirecting read query on standby only if standby is lagging no more than X seconds&lt;br /&gt;
2. Redirecting read query on standby unless there was recent write (writer should see his writes)&lt;br /&gt;
3. Redirecting some read queries on syn or async standby&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Pull request to Odyssey with described feature&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/yandex/odyssey&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool Graphing (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin has a GIS Viewer built into it&#039;s Query Tool as the result of a 2018 GSoC Project, that allows the user to render PostGIS shapes and points etc. and view them on a plain canvas or over one of a number of map sources.&lt;br /&gt;
&lt;br /&gt;
This project would be to add a similar capability to allow the user to plot query results in graph formats, for example, selecting column(s) to view on the X/Y axis and then rendering the output as a line chart, bar chart, or even a pie chart.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool bytea support (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently doesn&#039;t render bytea data in its Query Tool, or allow options to update such columns. This project would have 2 core aims:&lt;br /&gt;
&lt;br /&gt;
* Update the Query Tool to enable bytea data to be uploaded when editing a row.&lt;br /&gt;
* Add viewers to the Query Tool output grid such that when it can be detected that the data in a field is of a known type (image, sound or video file), a button can be displayed in the grid that when clicked will display or play the media.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool automatic mode detection (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently works in 2 different modes:&lt;br /&gt;
&lt;br /&gt;
* View Data mode allows modifications to the SQL Query only through the UI, but allows editing of data when used with a table with an appropriate primary key.&lt;br /&gt;
* Query mode allows arbitrary queries to be written and executed, but the user cannot edit the results.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to automatically detect if the query entered will produce in an updatable resultset and enable/disable editing of the results and other parts of the UI as appropriate (for example, disabling the sort/filter UI options if the query string is not one that can be programmatically changed).&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
High.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgBackRest port to Windows (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgBackRest is being reimplemented into C currently and it is well on its way.  There is already enough of the code in C that it&#039;s time to start working on porting pgBackRest to Windows.  This project would aim to have all of the C code ported to Windows, which would also include some changes in how pgBackRest operates.  The necessary changes for running pgBackRest on Windows have been contemplated during the architecture and design of pgBackRest and therefore should be reasonably straight-forward to implement.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C&lt;br /&gt;
* Working in a Windows development environment&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Medium.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* pgBackRest able to be built and run on Windows.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgbackrest.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/pgbackrest&lt;br /&gt;
&lt;br /&gt;
==Extract scanning strategy to the separate entity from GiST/GIN/SP-GiST opclasses (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL offers great indexing extensibility.  It supports index access methods which are templates for particular kinds of indexes.  Opclasses specify application of access method to particular data type.  There could be multiple opclasses for same access method and data type with different capabilities.  Moreover, since PostgreSQL 9.6+ index access methods could be user-defined themselves.&lt;br /&gt;
&lt;br /&gt;
However, there are still shortcomings in this extendability system.  Opclass specifies particular kind of index and its scanning strategies.  One problem is that scanning strategies of opclass can&#039;t be extended.  For instance, extension could add more spatial operators to built-in GiST opclasses for geometrical datatypes; or fuzzy string matching operators to build-in SP-GiST opclass for text (radix tree).  In order to overcome such shortcoming we need to make a scanning strategy a separate entity.  Such entity should contain search/order by operators itself as well as corresponding supporting functions such as:&lt;br /&gt;
&lt;br /&gt;
* consistent, distance for GiST,&lt;br /&gt;
* inner_consistent and leaf_consistent for SP-GiST,&lt;br /&gt;
* extractQuery, consistent, triConsistent and comparePartial for GIN.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* The ability to read technical papers and documentation to understand index access methods extendability&lt;br /&gt;
** http://minds.wisconsin.edu/bitstream/handle/1793/59976/TR1274.pdf&lt;br /&gt;
** http://zeus.sai.msu.ru/~megera/postgres/gist/papers/csd-97-950.pdf&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/spgist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gin.html&lt;br /&gt;
* Ability to refactor system catalog, to find the appropriate places in each of the index AMs to use new entities.  Therefore, the ability to navigate over functionality scattered among large and complex project.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project is difficult from the implementation side, because it requires consistent modification of many places in the source code.  Design question doesn&#039;t seem to be hard tough.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is a major contributor and committer.&lt;br /&gt;
* Oleg Bartunov can mentor.  Oleg is a major contributor.&lt;br /&gt;
* Teodor Sigaev can mentor. Teodor is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
The expected outcome is ability of extensions to add new extensions to existing opclasses.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33316</id>
		<title>GSoC 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=GSoC_2019&amp;diff=33316"/>
		<updated>2019-04-13T16:51:23Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Extract scanning strategy to the separate entity from GiST/GIN/SP-GiST opclasses (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting ideas for future Summer of Code projects.&lt;br /&gt;
&lt;br /&gt;
== Regarding Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Project ideas are to be added here by community members.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Google wants each idea to be supported by a few sentences and then a list of skills/reqs, difficulty level, potential mentors, expected outcomes, etc.  Please add sections in this format.&lt;br /&gt;
&lt;br /&gt;
== Mentors (2019) ==&lt;br /&gt;
&lt;br /&gt;
The following individuals have been listed as possible mentors on the below projects, and/or offered to be mentors for student-proposed projects:&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
* Andrey Borodin&lt;br /&gt;
* Vladimir Leskov&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Andreas Scherbaum&lt;br /&gt;
* Mark Wong&lt;br /&gt;
&lt;br /&gt;
== WAL-G safety features (2019) ==&lt;br /&gt;
&lt;br /&gt;
===== Project Description =====&lt;br /&gt;
WAL-G is the simple backup tool for PostgreSQL. Essentially, it supports backup and WAL archiving to cloud storages. WAL-G repository. Currently, we want to improve backup storing. To be more precise, we would like to see implemented following features:&lt;br /&gt;
* Retention policy improvement -- currently, we can only delete everything before specified backup or retain fix number of backups. We want to improve backup management, E.g. give user ability to mark important backup permanent to avoid its deletion.&lt;br /&gt;
* WAL&#039;s history consistency check -- we want to ensure, that we can provide PITR (point in time recovery) for the user.&lt;br /&gt;
* Page checksum verification -- it&#039;s one of the key features needed for backup verification.&lt;br /&gt;
&lt;br /&gt;
===== Skills needed =====&lt;br /&gt;
* Go language&lt;br /&gt;
* Ability to read technical papers and documentation to understand PostgreSQL inner structure.&lt;br /&gt;
===== Difficulty level =====&lt;br /&gt;
Moderate&lt;br /&gt;
&lt;br /&gt;
===== Potential Mentors =====&lt;br /&gt;
* Andrey Borodin can mentor. Andrey is WAL-G developer and PostgreSQL contributor.&lt;br /&gt;
* Vladimir Leskov can mentor. Vladimir is WAL-G developer.&lt;br /&gt;
&lt;br /&gt;
===== Expected Outcomes =====&lt;br /&gt;
All before mentioned features properly implemented, covered with tests and Pull-Requested to WAL-G.&lt;br /&gt;
&lt;br /&gt;
== GiST API advancement (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
GiST API was designed at the beginning of 90th to reduce boilerplate code around data access methods over a balanced tree. Now, after 30 years, there are some ideas on improving this API.&lt;br /&gt;
&lt;br /&gt;
Opclass developer must specify 4 core operations to make a type GiST-indexable:&lt;br /&gt;
&lt;br /&gt;
1. Split: a function to split set of datatype instances into two parts.&lt;br /&gt;
&lt;br /&gt;
2. Penalty calculation: a function to measure penalty for unification of two keys.&lt;br /&gt;
&lt;br /&gt;
3. Collision check: a function which determines whether two keys may have overlap or are not intersecting.&lt;br /&gt;
&lt;br /&gt;
4. Unification: a function to combine two keys into one so that combined key collides with both input keys.&lt;br /&gt;
&lt;br /&gt;
Functions 2 and 3 can be improved.&lt;br /&gt;
&lt;br /&gt;
For example, Revised R*-tree[1] algorithm of insertion cannot be expressed in terms of penalty-based algorithms. There were some attempts to bring parts of RR*-tree insertion, but they come down to ugly hacks [2]. Current GiST API, due to penalty-based insertion algorithm, does not allow to implement an important feature of RR*-tree: overlap optimization. As Norbert Beckman, author of RR*-tree, put it in the discussion: “Overlap optimization is one of the main elements, if not the main query performance tuning element of the RR*-tree. You would fall back to old R-Tree times if that would be left off.”&lt;br /&gt;
&lt;br /&gt;
Collision check currently returns a binary result:&lt;br /&gt;
&lt;br /&gt;
1.       Query may be collides with subtree MBR&lt;br /&gt;
&lt;br /&gt;
2.       Query do not collides with subtree&lt;br /&gt;
&lt;br /&gt;
This result may be augmented with a third state: subtree is totally within the query. In this case, GiST scan can scan down subtree without key checks.&lt;br /&gt;
&lt;br /&gt;
The potential effect of these improvements must be benchmarked. Probably, implementation of these two will spawn more ideas on GiST performance improvements.&lt;br /&gt;
&lt;br /&gt;
Another feature of RR*-tree is storing in the page additional MBR.  Such additional MBR covers all the entries MBRs just after page creation but don&#039;t updated afterwards.  Then, when this page is being split, such additional MBR could be used to select better split ration, and in turn in order to have better space utilization.  Currently GiST doesn&#039;t allow to store some additional datum per page, but it would be nice to have.&lt;br /&gt;
&lt;br /&gt;
Finally, GiST do not provide API for bulk loading. Alexander Korotkov during GSoC 2011 implemented buffered GiST build. This index construction is faster, but yields the index tree with virtually same querying performance. There are different algorithms aiming to provide better indexing tree due to some knowledge of data, e.g. [3]&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
*ability to understand searches within GiST&lt;br /&gt;
*ability to describe and set up datasets for performance features demostration&lt;br /&gt;
*ability to produce committable patch&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Easy&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are the benchmark for API features and committable patch implementing them.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
[1] Beckmann, Norbert, and Bernhard Seeger. &amp;quot;A revised r*-tree in comparison with related index structures.&amp;quot; Proceedings of the 2009 ACM SIGMOD International Conference on Management of data. ACM, 2009.&lt;br /&gt;
&lt;br /&gt;
[2] https://www.postgresql.org/message-id/flat/CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg%40mail.gmail.com#CAJEAwVFMo-FXaJ6Lkj8Wtb1br0MtBY48EGMVEJBOodROEGykKg@mail.gmail.com&lt;br /&gt;
&lt;br /&gt;
[3] Achakeev, Daniar, Bernhard Seeger, and Peter Widmayer. &amp;quot;Sort-based query-adaptive loading of r-trees.&amp;quot; Proceedings of the 21st ACM international conference on Information and knowledge management. ACM, 2012.&lt;br /&gt;
&lt;br /&gt;
== TOAST&#039;ing in slices (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
The best approach to slicing a given value will likely depend on the data type.  A text field, for example, would most likely be naturally split upon character (not byte) boundaries, while an array data type would likely be split upon its element boundary.  A JSON document might be split in another way (presumably based on how a JSONB is structured).  A possible additional task would be to consider if it&#039;s possible to include in an index the information about which keys or values exist in a given TOAST chunk.  For the JSONB case, in particular, one can imagine that it would eventually be possible to extract out just the JSON chunks which have the key or value being searched for.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand complex on-disk data structures&lt;br /&gt;
* Ability to understand inverted indexing&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Moderate-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements the ability to split up a single value into known-sized pre-compressed chunks which are then stored in TOAST, and functions able to be optimized based on that knowledge.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== de-TOAST&#039;ing using an iterator (2019) ==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
Currently, an entire individual value is compressed all together and then stored in data chunks in the TOAST table without an indication of which piece of the original data made it into what chunk of the TOAST table.  What this ends up meaning is that to get a subset of the TOAST&#039;d value, all of the chunks (or at least all of them up to the point which is being searched for, if that is known) have to be re-formed and the entire value de-compressed.&lt;br /&gt;
&lt;br /&gt;
=====Project details=====&lt;br /&gt;
This project would aim to provide the ability to de-TOAST a fully TOAST&#039;d and compressed field using an iterator, and then update the appropriate parts of the code to use the iterator where possible instead of de-TOAST&#039;ing and de-compressing the entire value.  Examples where this can be helpful include using substring() from the beginning of the value, or doing a pattern or substring match.  This is distinct and simpler than the above project which envisions a larger change to the TOAST system.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* C skills&lt;br /&gt;
* Ability to understand how traditional compression and block-based compression algorithms function&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
* Easy-level&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
Expected outcomes are a patch which implements de-TOAST&#039;ing a value using an iterator and then updates to the other parts of the code to use that iterator, resulting in a significant performance improvements for certain queries.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Improve PostgreSQL Regression Test Coverage (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage for PostgreSQL isn&#039;t great, to the point where some areas of the code are covered only at single-digit-percent levels.&lt;br /&gt;
&lt;br /&gt;
Having good regression tests for such an important project as PostgreSQL is really key to minimizing the chance that any regressions are introduced.  While this might seem like a small project, it isn&#039;t, particularly when it comes to PostgreSQL.  PostgreSQL is over 1.3M lines of code and some of the code paths can be tricky to reach.&lt;br /&gt;
&lt;br /&gt;
The current regression test coverage can be see here: https://coverage.postgresql.org&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s build system includes a &amp;quot;make coverage-html&amp;quot; to generate the report.&lt;br /&gt;
&lt;br /&gt;
Please note that this project involves writing SQL code and Perl code, at a minimum, to implement the tests necessary to increase the code coverage of the PostgreSQL regression tests.  This is not a small task as PostgreSQL is currently at only about 73% LOC coverage.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Perl, as many PostgreSQL regression tests are written using the Perl TAP system and new ones will likely need to be.&lt;br /&gt;
* SQL, to craft tests that hit certain code paths&lt;br /&gt;
* Ability to read C code enough to work through a way to get a particular line or lines of code tested.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
For someone with the skills listed, even at a relatively beginner level, should make this a very straight-forward if tedious project.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost can mentor.  Stephen is a major contributor and committer and has been working on improving regression tests in PG for quite a while.&lt;br /&gt;
* Andreas Scherbaum can mentor.  Andreas mentored GSoC and Code-In in the past, and in general helps boosting PostgreSQL in Europe.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Significantly improved code coverage for the PostgreSQL regression test suite, ie: 73% -&amp;gt; 80%.&lt;br /&gt;
&lt;br /&gt;
==Enhancing amcheck for all AMs (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Amcheck is a PostgreSQL extension to verify the integrity of index against invariants that should always hold in the valid index. This tool is designed to diagnose corruption and help developers during the implementation of new features in access methods. Currently, amcheck supports only B-tree. Also, work on GiST is in progress https://github.com/petergeoghegan/amcheck/pull/11&lt;br /&gt;
But amcheck could be used for many other indexes: GIN, SP-GiST, BRIN, RUM.&lt;br /&gt;
For each AM it is necessary to deduce invariants to check, implement this checks and test against various index states.&lt;br /&gt;
Also, it would be useful to unite all AM check methods in a single entry point for checking index.&lt;br /&gt;
The interface of check functions can also be enhanced in favor of more detailed corruption information. It would be useful to model various corruptions, including both those which can be found by data_checksums and those which cannot.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
* Good C code skills&lt;br /&gt;
* Understanging of access methods ideas and details&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project requires to grasp algorithms behind very sophisticated data structures, along with concurrency and recovery over them.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor. Peter Geoghegan can consult team on controversial cases. Peter Geoghegan is the original author of amcheck.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Support for all major PostgreSQL AMs in amcheck.&lt;br /&gt;
&lt;br /&gt;
==Develop Performance Farm Database and Website (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Performance Farm project is a community project to collect performance data from tests as code changes are made to PostgreSQL.  To support this effort, a database needs to be created for storing results, and a Web site developed to review results.  This project will focus on developing the Web site on top of the database.&lt;br /&gt;
&lt;br /&gt;
The database will be using PostgreSQL in the back-end.  Test results will come in the form of JSON and flat files.  The Web application will be developed using the Django Web framework.&lt;br /&gt;
&lt;br /&gt;
For reference, the code that will be supplying test results is https://git.postgresql.org/gitweb/?p=pgperffarm.git;a=summary.&lt;br /&gt;
&lt;br /&gt;
As an example, the PostgreSQL Build Farm site [1] is a central repository for the results of testing source code changes for PostgreSQL as they occur, on a wide variety of platforms.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python programming&lt;br /&gt;
* SQL programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
This project requires familiarity with Python programming and basic database experience.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Mark Wong can mentor.&lt;br /&gt;
* Andreas Scherbaum can mentor.&lt;br /&gt;
* Pavan Agrawal can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* A functional Web site where clients can upload test results, and users can search and review uploaded results.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://buildfarm.postgresql.org/&lt;br /&gt;
&lt;br /&gt;
==Read/write transaction-level routing in Odyssey (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
Odyssey is an advanced multi-threaded PostgreSQL connection pooler and request router.&lt;br /&gt;
Odyssey allows defining client routing rules by specifying client database, client user name and storage connection. In some HA scenarios, it is necessary to define different routing for read-only and r\w transactions.&lt;br /&gt;
Odyssey can parse transaction opening statements and assign different routes depending on transaction types.&lt;br /&gt;
&lt;br /&gt;
It would be cool to support many consistency models for reads on standby:&lt;br /&gt;
1. Redirecting read query on standby only if standby is lagging no more than X seconds&lt;br /&gt;
2. Redirecting read query on standby unless there was recent write (writer should see his writes)&lt;br /&gt;
3. Redirecting some read queries on syn or async standby&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C programming&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Andrey Borodin can mentor.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Pull request to Odyssey with described feature&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/yandex/odyssey&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool Graphing (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin has a GIS Viewer built into it&#039;s Query Tool as the result of a 2018 GSoC Project, that allows the user to render PostGIS shapes and points etc. and view them on a plain canvas or over one of a number of map sources.&lt;br /&gt;
&lt;br /&gt;
This project would be to add a similar capability to allow the user to plot query results in graph formats, for example, selecting column(s) to view on the X/Y axis and then rendering the output as a line chart, bar chart, or even a pie chart.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool bytea support (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently doesn&#039;t render bytea data in its Query Tool, or allow options to update such columns. This project would have 2 core aims:&lt;br /&gt;
&lt;br /&gt;
* Update the Query Tool to enable bytea data to be uploaded when editing a row.&lt;br /&gt;
* Add viewers to the Query Tool output grid such that when it can be detected that the data in a field is of a known type (image, sound or video file), a button can be displayed in the grid that when clicked will display or play the media.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Moderate.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgAdmin 4 Query Tool automatic mode detection (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgAdmin&#039;s Query Tool currently works in 2 different modes:&lt;br /&gt;
&lt;br /&gt;
* View Data mode allows modifications to the SQL Query only through the UI, but allows editing of data when used with a table with an appropriate primary key.&lt;br /&gt;
* Query mode allows arbitrary queries to be written and executed, but the user cannot edit the results.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to automatically detect if the query entered will produce in an updatable resultset and enable/disable editing of the results and other parts of the UI as appropriate (for example, disabling the sort/filter UI options if the query string is not one that can be programmatically changed).&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript/JQuery&lt;br /&gt;
* HTML/CSS&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
High.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* Feature committed to the pgAdmin tree for the next release, with documentation and test cases.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary&lt;br /&gt;
&lt;br /&gt;
==pgBackRest port to Windows (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
pgBackRest is being reimplemented into C currently and it is well on its way.  There is already enough of the code in C that it&#039;s time to start working on porting pgBackRest to Windows.  This project would aim to have all of the C code ported to Windows, which would also include some changes in how pgBackRest operates.  The necessary changes for running pgBackRest on Windows have been contemplated during the architecture and design of pgBackRest and therefore should be reasonably straight-forward to implement.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* C&lt;br /&gt;
* Working in a Windows development environment&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
Medium.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* David Steele&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
* pgBackRest able to be built and run on Windows.&lt;br /&gt;
&lt;br /&gt;
=====References=====&lt;br /&gt;
&lt;br /&gt;
[1] https://www.pgbackrest.org/&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/pgbackrest&lt;br /&gt;
&lt;br /&gt;
==Extract scanning strategy to the separate entity from GiST/GIN/SP-GiST opclasses (2019)==&lt;br /&gt;
&lt;br /&gt;
=====Project Description=====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL offers great indexing extensibility.  It supports index access methods which are templates for particular kinds of indexes.  Opclasses specify application of access method to particular data type.  There could be multiple opclasses for same access method and data type with different capabilities.  Moreover, since PostgreSQL 9.6+ index access methods could be user-defined themselves.&lt;br /&gt;
&lt;br /&gt;
However, there are still shortcomings in this extendability system.  Opclass specifies particular kind of index and its scanning strategies.  One problem is that scanning strategies of opclass can&#039;t be extended.  For instance, extension could add more spatial operators to built-in GiST opclasses for geometrical datatypes; or fuzzy string matching operators to build-in SP-GiST opclass for text (radix tree).  In order to overcome such shortcoming we need to make a scanning strategy a separate entity.  Such entity should contain search/order by operators itself as well as corresponding supporting functions such as:&lt;br /&gt;
&lt;br /&gt;
* consistent, distance for GiST,&lt;br /&gt;
* inner_consistent and leaf_consistent for SP-GiST,&lt;br /&gt;
* extractQuery, consistent, triConsistent and comparePartial for GIN.&lt;br /&gt;
&lt;br /&gt;
=====Skills needed=====&lt;br /&gt;
&lt;br /&gt;
* The ability to read technical papers and documentation to understand index access methods extendability&lt;br /&gt;
** http://minds.wisconsin.edu/bitstream/handle/1793/59976/TR1274.pdf&lt;br /&gt;
** http://zeus.sai.msu.ru/~megera/postgres/gist/papers/csd-97-950.pdf&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/spgist.html&lt;br /&gt;
** https://www.postgresql.org/docs/current/static/gin.html&lt;br /&gt;
* Ability to refactor system catalog, to find the appropriate places in each of the index AMs to use new entities.  Therefore, the ability to navigate over functionality scattered among large and complex project.&lt;br /&gt;
&lt;br /&gt;
=====Difficulty Level=====&lt;br /&gt;
&lt;br /&gt;
The project is difficult from the implementation side, because it requires consistent modification of many places in the source code.  Design question doesn&#039;t seem to be hard tough.&lt;br /&gt;
&lt;br /&gt;
=====Potential Mentors=====&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov can mentor.  Alexander is a major contributor and committer.&lt;br /&gt;
* Oleg Bartunov can mentor.  Oleg is a major contributor.&lt;br /&gt;
* Teodor Sigaev can mentor. Teodor is a major contributor and committer.&lt;br /&gt;
&lt;br /&gt;
=====Expected Outcomes=====&lt;br /&gt;
&lt;br /&gt;
The expected outcome is ability of extensions to add new extensions to existing opclasses.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Performance_Optimization&amp;diff=33287</id>
		<title>Performance Optimization</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Performance_Optimization&amp;diff=33287"/>
		<updated>2019-04-10T01:15:28Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Removed extremely obsolete links. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== How to Effectively Ask Questions Regarding Performance on Postgres Lists ==&lt;br /&gt;
* [[Slow_Query_Questions]]&lt;br /&gt;
&lt;br /&gt;
== General Setup and Optimization ==&lt;br /&gt;
* [[Tuning Your PostgreSQL Server]] by Greg Smith, Robert Treat, and Christopher Browne&lt;br /&gt;
* [http://www.revsys.com/writings/postgresql-performance.html Performance Tuning PostgreSQL] by Frank Wiles&lt;br /&gt;
* [http://linuxfinances.info/info/quickstart.html QuickStart Guide to Tuning  PostgreSQL] by Christopher Browne&lt;br /&gt;
* [http://www.varlena.com/GeneralBits/Tidbits/perf.html Performance Tuning] by Josh Berkus and Shridhar Daithankar&lt;br /&gt;
* [http://old.zope.org/Members/pupq/pg_in_aggregates/howto_view Replacing Slow Loops in PostgreSQL] by Joel Burton&lt;br /&gt;
* [http://momjian.us/main/writings/pgsql/hw_performance/ PostgreSQL Hardware Performance Tuning] by Bruce Momjian&lt;br /&gt;
* [http://www.targeted.org/articles/databases/fragmentation.html The effects of data fragmentation in a mixed load database] by Dmitry Dvoinikov&lt;br /&gt;
* [http://www.craigkerstiens.com/2012/10/01/understanding-postgres-performance/ Understanding Postgres Performance] by Craig Kerstiens&lt;br /&gt;
* [http://www.craigkerstiens.com/2013/01/10/more-on-postgres-performance/ More on Postgres Performance] by Craig Kerstiens&lt;br /&gt;
* [https://www.citusdata.com/blog/2016/10/12/count-performance/ Faster PostgreSQL counting]&lt;br /&gt;
* [https://medium.com/pgmustard/row-count-estimates-in-postgres-8540087a826e/ Row count estimates in Postgres] by David Conlin&lt;br /&gt;
* [https://medium.com/pgmustard/index-only-scans-in-postgres-a1603f551ee/ Index-only scans in Postgres] by David Conlin&lt;br /&gt;
&lt;br /&gt;
Performance courses are available from a number of companies. Check [http://www.postgresql.org/about/eventarchive events and trainings] for further details.&lt;br /&gt;
&lt;br /&gt;
==Critical maintenance for performance==&lt;br /&gt;
*[[Introduction to VACUUM, ANALYZE, EXPLAIN, and COUNT]] by Jim Nasby.&lt;br /&gt;
*[[VACUUM FULL]] and why you should avoid it&lt;br /&gt;
*[[Planner Statistics]]&lt;br /&gt;
*[[Using EXPLAIN]]&lt;br /&gt;
*[[Logging Difficult Queries]]&lt;br /&gt;
*[[Logging Checkpoints]]&lt;br /&gt;
*[[Bulk Loading and Restores]]&lt;br /&gt;
*[[Performance Analysis Tools]] by Craig Ringer&lt;br /&gt;
&lt;br /&gt;
== Database architecture ==&lt;br /&gt;
* [[Priorities|Limiting and prioritizing user/query/database resource usage]] by Craig Ringer&lt;br /&gt;
* [[Prioritizing databases by separating into multiple clusters]] by Craig Ringer&lt;br /&gt;
* [[Clustering]]&lt;br /&gt;
* [[Shared Storage]]&lt;br /&gt;
&lt;br /&gt;
==Database Hardware Selection and Setup==&lt;br /&gt;
* [[Database Hardware]]&lt;br /&gt;
* [[Reliable Writes]]&lt;br /&gt;
&lt;br /&gt;
==Benchmark Workloads==&lt;br /&gt;
* [[:Category:Benchmarking]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]][[Category:Performance]][[Category:Benchmarking]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33286</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33286"/>
		<updated>2019-04-10T01:11:11Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* SQuirrel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is an Open Source management tool for PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editing tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== SQuirrel ===&lt;br /&gt;
&lt;br /&gt;
http://www.squirrelsql.org/&lt;br /&gt;
&lt;br /&gt;
Platforms that support Java&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
SQuirreL SQL Client is a graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc. The minimum version of Java supported is 1.8.x as of SQuirreL version 3.8.1.&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Linux, Windows and macOS&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgrights: GUI for PostgreSQL roles, privileges and policies ===&lt;br /&gt;
https://github.com/apsavin/pgrights&lt;br /&gt;
&lt;br /&gt;
MacOS (based on Electron, so versions for other OS can be build from source code).&lt;br /&gt;
&lt;br /&gt;
Open-source software which allows you to easely understand what can do (and what can&#039;t) a PostgreSQL user with a table&#039;s data. In other words, it&#039;s a viewer of results of GRANT commands and row-level security rules applied for a particular table and for a particular role.&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== SQLGate ===&lt;br /&gt;
&lt;br /&gt;
https://www.sqlgate.com/product/download&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQLGate is a simple but powerful IDE for multiple Database including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* Powerful Data Grid and ERD&lt;br /&gt;
&lt;br /&gt;
* Multiple SQL Execution&lt;br /&gt;
&lt;br /&gt;
* Auto-Complete&lt;br /&gt;
&lt;br /&gt;
* Intuitive UI/UX&lt;br /&gt;
&lt;br /&gt;
* Multiple Themes&lt;br /&gt;
&lt;br /&gt;
* Fast processing speed&lt;br /&gt;
&lt;br /&gt;
Use SQLGate to maximize your productivity!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface. It comes in two editions - Standard and Express (free).&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
* SQL Development&lt;br /&gt;
* Database Explorer&lt;br /&gt;
* Data Editor&lt;br /&gt;
* Data Export and Import&lt;br /&gt;
* Pivot Table&lt;br /&gt;
* Master-Detail Browser&lt;br /&gt;
* Data Reports&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or proprietary license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Replicator Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/replicator&lt;br /&gt;
&lt;br /&gt;
Replicator allows table data comparison and sync - even with heterogeneous databases. It is unique in the fact it can replicate changes only even if source is non-relational (CSV, DBF, Excel documents, Paradox...). Replicator has a built-in scheduler for easy periodic change replication.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
=== Database Tour Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.databasetour.net&lt;br /&gt;
&lt;br /&gt;
Database Tour Pro is a database tool with built-in report builder for Windows. It works with different types of relational databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Creating tables.&lt;br /&gt;
* Viewing and editing data.&lt;br /&gt;
* Several ways to print data.&lt;br /&gt;
* Built-in report engine and visual report designer with templates, expressions, preview etc.&lt;br /&gt;
* Expression builder for report and export expressions.&lt;br /&gt;
* Building and executing SQL queries. Support for execution of multi statement SQL scripts. Syntax highlighting in SQL editor. Support for parameterized SQL queries.&lt;br /&gt;
* Enhanced database grids, which allow to view and manipulate the data in the most convenient way, including sorting by clicking column header, changing row heights, resizing columns etc.&lt;br /&gt;
* Command line support for executing queries, opening tables, export-import operations, loading reports etc. with logging the performed operations.&lt;br /&gt;
* Searching and replacing text in database with ability to choose fields, record range etc.&lt;br /&gt;
* Importing data to table from another table or a query.&lt;br /&gt;
* Exporting data from open table or query to file(s) like text, CSV, HTML, XLSX, XML, RTF, DBF or to another relational database.&lt;br /&gt;
* Copying data to clipboard.&lt;br /&gt;
* Viewing and editing Blob data, such as large text and graphics.&lt;br /&gt;
* Tools for editing text fields (trimming, changing case of symbols, replacing text).&lt;br /&gt;
* Customized data view (font, background).&lt;br /&gt;
* Conditional formatting data in database grids and reports.&lt;br /&gt;
* Ability to control transactions.&lt;br /&gt;
&lt;br /&gt;
=== Reportizer ===&lt;br /&gt;
&lt;br /&gt;
https://www.reportizer.net&lt;br /&gt;
&lt;br /&gt;
Reportizer is a database reporting tool, which allows easy creating, modifying, and printing database reports from different types of databases, including PostgreSQL. Reports can be edited in convenient visual report builder or in text mode. It supports calculating fields, multi-column reports, expressions, grouping, displaying images etc. Reportizer can export reports to HTML, XLSX, image, or internal format. There is an ability to load and print reports from command line. Reportizer allows to manage report collections, which can be held either in files or in database tables.&lt;br /&gt;
&lt;br /&gt;
=== Exportizer Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.vlsoftware.net/exportizer-pro/&lt;br /&gt;
&lt;br /&gt;
Exportizer Pro is a database export tool, which can work with PostgreSQL database either as source or destination. It allows to export data to database, file, clipboard, or printer.&lt;br /&gt;
* Possible sources: ODBC data sources, files of DB (Paradox), DBF (dBase, FoxPro), MDB, ACCDB, XLS, XLSX, GDB, IB, FDB, HTML, UDL, DBC, TXT, CSV types, databases specified by ADO connection strings, and databases like Oracle, SQL Server, Postgresql, DB2, Informix, SQLite, Interbase etc.&lt;br /&gt;
* Possible destinations: file formats like text, CSV, XLS, XLSX, RTF, XML, HTML, PDF, DBF, SLK, SQL script, and relational database of any supported type.&lt;br /&gt;
* It is possible to export all or selected tables from an open database at once.&lt;br /&gt;
* Exportizer Pro can automatically detect the most known image types (JPEG, PNG, GIF, BMP, ICO) in BLOB fields and export them, for example, to HTML or XLSX.&lt;br /&gt;
* There is an ability to specify the source-to-target field mappings.&lt;br /&gt;
* Export operations can be performed either via the program interface or via command line.&lt;br /&gt;
&lt;br /&gt;
=== TiCodeX SQL Schema Compare ===&lt;br /&gt;
&lt;br /&gt;
https://www.ticodex.com/&lt;br /&gt;
&lt;br /&gt;
TiCodeX SQL Schema Compare is a tools that allows database administrators to compare multiple database schema in order to manage versioning.&amp;lt;br/&amp;gt;&lt;br /&gt;
The software runs on Windows, Linux and Mac and supports Microsoft SQL (MS-SQL), MySQL, PostgreSQL, Azure SQL and MS-SQL on Amazon RDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key Features:&#039;&#039;&#039;&lt;br /&gt;
* Runs on Windows, Linux and MacOS&lt;br /&gt;
* Localized in English, German and Italian&lt;br /&gt;
* Compare changes between two SQL Database schemas (as example from development to test to production)&lt;br /&gt;
* View database differences and explore schema changes to see what&#039;s going on&lt;br /&gt;
* Automatically create full database migration scripts&lt;br /&gt;
* Securely save database and server login details&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
pgMustard is a performance tool for PostgreSQL that provides a user interface for your EXPLAIN ANALYSE output, as well as tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Quickly see the slowest operations&lt;br /&gt;
* Code snippets to tie operations back to the query&lt;br /&gt;
* Tips to speed up your query💡&lt;br /&gt;
* Does the arithmetic for you (including wall clock times)&lt;br /&gt;
* Explanations of operation types and key concepts&lt;br /&gt;
* Links to relevant documentation and blog posts&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
* JSON format plans&lt;br /&gt;
* Any supported version of PostgreSQL&lt;br /&gt;
* English language only&lt;br /&gt;
* Web application, no installation required&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33285</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=33285"/>
		<updated>2019-04-10T00:54:17Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is an Open Source management tool for PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editing tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== SQuirrel ===&lt;br /&gt;
&lt;br /&gt;
http://squirrel-sql.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Platforms that support Java&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
SQuirreL SQL Client is a graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc. The minimum version of Java supported is 1.8.x as of SQuirreL version 3.8.1.&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Linux, Windows and macOS&lt;br /&gt;
&lt;br /&gt;
Open source full-featured tool for database management. Currently supports PostgreSQL (9.3 - 11), Oracle (11g - 18c), MySQL (5.6 - 8.0) and MariaDB (10.1 - 10.3). More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgrights: GUI for PostgreSQL roles, privileges and policies ===&lt;br /&gt;
https://github.com/apsavin/pgrights&lt;br /&gt;
&lt;br /&gt;
MacOS (based on Electron, so versions for other OS can be build from source code).&lt;br /&gt;
&lt;br /&gt;
Open-source software which allows you to easely understand what can do (and what can&#039;t) a PostgreSQL user with a table&#039;s data. In other words, it&#039;s a viewer of results of GRANT commands and row-level security rules applied for a particular table and for a particular role.&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== SQLGate ===&lt;br /&gt;
&lt;br /&gt;
https://www.sqlgate.com/product/download&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQLGate is a simple but powerful IDE for multiple Database including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* Powerful Data Grid and ERD&lt;br /&gt;
&lt;br /&gt;
* Multiple SQL Execution&lt;br /&gt;
&lt;br /&gt;
* Auto-Complete&lt;br /&gt;
&lt;br /&gt;
* Intuitive UI/UX&lt;br /&gt;
&lt;br /&gt;
* Multiple Themes&lt;br /&gt;
&lt;br /&gt;
* Fast processing speed&lt;br /&gt;
&lt;br /&gt;
Use SQLGate to maximize your productivity!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface. It comes in two editions - Standard and Express (free).&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
* SQL Development&lt;br /&gt;
* Database Explorer&lt;br /&gt;
* Data Editor&lt;br /&gt;
* Data Export and Import&lt;br /&gt;
* Pivot Table&lt;br /&gt;
* Master-Detail Browser&lt;br /&gt;
* Data Reports&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or proprietary license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Replicator Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/replicator&lt;br /&gt;
&lt;br /&gt;
Replicator allows table data comparison and sync - even with heterogeneous databases. It is unique in the fact it can replicate changes only even if source is non-relational (CSV, DBF, Excel documents, Paradox...). Replicator has a built-in scheduler for easy periodic change replication.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
=== Database Tour Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.databasetour.net&lt;br /&gt;
&lt;br /&gt;
Database Tour Pro is a database tool with built-in report builder for Windows. It works with different types of relational databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Creating tables.&lt;br /&gt;
* Viewing and editing data.&lt;br /&gt;
* Several ways to print data.&lt;br /&gt;
* Built-in report engine and visual report designer with templates, expressions, preview etc.&lt;br /&gt;
* Expression builder for report and export expressions.&lt;br /&gt;
* Building and executing SQL queries. Support for execution of multi statement SQL scripts. Syntax highlighting in SQL editor. Support for parameterized SQL queries.&lt;br /&gt;
* Enhanced database grids, which allow to view and manipulate the data in the most convenient way, including sorting by clicking column header, changing row heights, resizing columns etc.&lt;br /&gt;
* Command line support for executing queries, opening tables, export-import operations, loading reports etc. with logging the performed operations.&lt;br /&gt;
* Searching and replacing text in database with ability to choose fields, record range etc.&lt;br /&gt;
* Importing data to table from another table or a query.&lt;br /&gt;
* Exporting data from open table or query to file(s) like text, CSV, HTML, XLSX, XML, RTF, DBF or to another relational database.&lt;br /&gt;
* Copying data to clipboard.&lt;br /&gt;
* Viewing and editing Blob data, such as large text and graphics.&lt;br /&gt;
* Tools for editing text fields (trimming, changing case of symbols, replacing text).&lt;br /&gt;
* Customized data view (font, background).&lt;br /&gt;
* Conditional formatting data in database grids and reports.&lt;br /&gt;
* Ability to control transactions.&lt;br /&gt;
&lt;br /&gt;
=== Reportizer ===&lt;br /&gt;
&lt;br /&gt;
https://www.reportizer.net&lt;br /&gt;
&lt;br /&gt;
Reportizer is a database reporting tool, which allows easy creating, modifying, and printing database reports from different types of databases, including PostgreSQL. Reports can be edited in convenient visual report builder or in text mode. It supports calculating fields, multi-column reports, expressions, grouping, displaying images etc. Reportizer can export reports to HTML, XLSX, image, or internal format. There is an ability to load and print reports from command line. Reportizer allows to manage report collections, which can be held either in files or in database tables.&lt;br /&gt;
&lt;br /&gt;
=== Exportizer Pro ===&lt;br /&gt;
&lt;br /&gt;
https://www.vlsoftware.net/exportizer-pro/&lt;br /&gt;
&lt;br /&gt;
Exportizer Pro is a database export tool, which can work with PostgreSQL database either as source or destination. It allows to export data to database, file, clipboard, or printer.&lt;br /&gt;
* Possible sources: ODBC data sources, files of DB (Paradox), DBF (dBase, FoxPro), MDB, ACCDB, XLS, XLSX, GDB, IB, FDB, HTML, UDL, DBC, TXT, CSV types, databases specified by ADO connection strings, and databases like Oracle, SQL Server, Postgresql, DB2, Informix, SQLite, Interbase etc.&lt;br /&gt;
* Possible destinations: file formats like text, CSV, XLS, XLSX, RTF, XML, HTML, PDF, DBF, SLK, SQL script, and relational database of any supported type.&lt;br /&gt;
* It is possible to export all or selected tables from an open database at once.&lt;br /&gt;
* Exportizer Pro can automatically detect the most known image types (JPEG, PNG, GIF, BMP, ICO) in BLOB fields and export them, for example, to HTML or XLSX.&lt;br /&gt;
* There is an ability to specify the source-to-target field mappings.&lt;br /&gt;
* Export operations can be performed either via the program interface or via command line.&lt;br /&gt;
&lt;br /&gt;
=== TiCodeX SQL Schema Compare ===&lt;br /&gt;
&lt;br /&gt;
https://www.ticodex.com/&lt;br /&gt;
&lt;br /&gt;
TiCodeX SQL Schema Compare is a tools that allows database administrators to compare multiple database schema in order to manage versioning.&amp;lt;br/&amp;gt;&lt;br /&gt;
The software runs on Windows, Linux and Mac and supports Microsoft SQL (MS-SQL), MySQL, PostgreSQL, Azure SQL and MS-SQL on Amazon RDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key Features:&#039;&#039;&#039;&lt;br /&gt;
* Runs on Windows, Linux and MacOS&lt;br /&gt;
* Localized in English, German and Italian&lt;br /&gt;
* Compare changes between two SQL Database schemas (as example from development to test to production)&lt;br /&gt;
* View database differences and explore schema changes to see what&#039;s going on&lt;br /&gt;
* Automatically create full database migration scripts&lt;br /&gt;
* Securely save database and server login details&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
pgMustard is a performance tool for PostgreSQL that provides a user interface for your EXPLAIN ANALYSE output, as well as tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Quickly see the slowest operations&lt;br /&gt;
* Code snippets to tie operations back to the query&lt;br /&gt;
* Tips to speed up your query💡&lt;br /&gt;
* Does the arithmetic for you (including wall clock times)&lt;br /&gt;
* Explanations of operation types and key concepts&lt;br /&gt;
* Links to relevant documentation and blog posts&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
* JSON format plans&lt;br /&gt;
* Any supported version of PostgreSQL&lt;br /&gt;
* English language only&lt;br /&gt;
* Web application, no installation required&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=33210</id>
		<title>Don&#039;t Do This</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=33210"/>
		<updated>2019-04-03T18:38:29Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Tool usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A short list of common mistakes.&lt;br /&gt;
&lt;br /&gt;
= Database Encoding =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use SQL_ASCII ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
While the name suggests that this encoding is in some meaningful way related to ASCII, it is not. Instead, it simply forbids the use of NUL bytes.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
= Tool usage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use psql -W or --password ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;tt&amp;gt;psql -W&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;psql --password&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Using the --password or -W flags will tell [https://www.postgresql.org/docs/current/static/reference-client.html psql] to prompt you for a password, before trying to connect to the server - so you&#039;ll be prompted for a password even if the server doesn&#039;t require one.&lt;br /&gt;
&lt;br /&gt;
It&#039;s never required, as if the server does require a password psql will prompt you for one, and it can be very confusing when setting up permissions. If you&#039;re connecting with -W to a server configured to allow you access via &amp;lt;tt&amp;gt;peer&amp;lt;/tt&amp;gt; authentication you may think that it&#039;s requiring a password when it really isn&#039;t. And if the user you&#039;re logging in as doesn&#039;t have a password set or you enter the wrong password at the prompt you&#039;ll still be logged in and think you have the right password - but you won&#039;t be able to log in from other clients (that connect via localhost) or when logged in as other users.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never, pretty much. It will save a round trip to the server but that&#039;s about it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use rules ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use [https://www.postgresql.org/docs/current/static/sql-createrule.html rules]. If you think you want to, use a [https://www.postgresql.org/docs/current/static/plpgsql-trigger.html trigger] instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Rules are incredibly powerful, but they don&#039;t do what they look like they do. They look like they&#039;re some conditional logic, but they actually rewrite a query to modify it or add additional queries to it.&lt;br /&gt;
&lt;br /&gt;
That means that [http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/ all non-trivial rules are incorrect].&lt;br /&gt;
&lt;br /&gt;
Depesz has [https://www.depesz.com/2010/06/15/to-rule-or-not-to-rule-that-is-the-question/ more to say] about them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never. While the rewriter is an implementation detail of VIEWs, there is no reason to pry up this cover plate directly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use table inheritance ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use [https://www.postgresql.org/docs/current/tutorial-inheritance.html table inheritance]. If you think you want to, use foreign keys instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Table inheritance was part of a fad wherein the database was closely coupled to object-oriented code. It turned out that coupling things that closely didn&#039;t actually produce the desired results.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never. Now that table partitioning is done natively, the only plausible use case for table inheritance has been replaced by a native feature that handles tuple routing, etc., without bespoke code.&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SQL constructs =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use NOT IN ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt;, or any combination of &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; such as &amp;lt;code&amp;gt;NOT (x IN (select…))&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
(If you think you wanted &amp;lt;code&amp;gt;NOT IN (select …)&amp;lt;/code&amp;gt; then you should rewrite to use &amp;lt;code&amp;gt;NOT EXISTS&amp;lt;/code&amp;gt; instead.)&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Two reasons:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt; behaves in unexpected ways if there is a null present:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (1,null); -- always returns 0 rows&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (select x from bar);&lt;br /&gt;
   -- returns 0 rows if any value of bar.x is null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because &amp;lt;code&amp;gt;col IN (1,null)&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; if col=1, and &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; otherwise (i.e. it can never return &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;). Since &amp;lt;code&amp;gt;NOT (TRUE)&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;, but &amp;lt;code&amp;gt;NOT (NULL)&amp;lt;/code&amp;gt; is still &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;, there is no way that &amp;lt;code&amp;gt;NOT (col IN (1,null))&amp;lt;/code&amp;gt; (which is the same thing as &amp;lt;code&amp;gt;col NOT IN (1,null)&amp;lt;/code&amp;gt;) can return &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; under any circumstances.&lt;br /&gt;
&lt;br /&gt;
2. Because of point 1 above, &amp;lt;code&amp;gt;NOT IN (SELECT ...)&amp;lt;/code&amp;gt; does not optimize very well. In particular, the planner can&#039;t transform it into an anti-join, and so it becomes either a hashed Subplan or a plain Subplan. The hashed subplan is fast, but the planner only allows that plan for small result sets; the plain subplan is &#039;&#039;&#039;horrifically&#039;&#039;&#039; slow (in fact O(N²)). This means that the performance can look good in small-scale tests but then slow down by 5 or more orders of magnitude once a size threshold is crossed; you &#039;&#039;&#039;do not&#039;&#039;&#039; want this to happen.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NOT IN (&amp;lt;i&amp;gt;list,of,values,...&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; is mostly safe &#039;&#039;unless&#039;&#039; you might have a null in the list (via a parameter or otherwise). So it&#039;s sometimes natural and even advisable to use it when excluding specific constant values from a query result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use upper case table or column names ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use NamesLikeThis, use names_like_this.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds all names - of tables, columns, functions and everything else - to lower case unless they&#039;re &amp;quot;double quoted&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So &amp;lt;tt&amp;gt;create table Foo()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;foo&amp;lt;/tt&amp;gt;, while &amp;lt;tt&amp;gt;create table &amp;quot;Bar&amp;quot;()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;Bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These select commands will work: &amp;lt;tt&amp;gt;select * from Foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from &amp;quot;Bar&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These will fail with &amp;quot;no such table&amp;quot;: &amp;lt;tt&amp;gt;select * from &amp;quot;Foo&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from Bar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This means that if you use uppercase characters in your table or column names you have to either &#039;&#039;always&#039;&#039; double quote them or &#039;&#039;never&#039;&#039; double quote them. That&#039;s annoying enough by hand, but when you start using other tools to access the database, some of which always quote all names and some don&#039;t, it gets very confusing.&lt;br /&gt;
&lt;br /&gt;
Stick to using a-z, 0-9 and underscore for names and you never have to worry about quoting them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If it&#039;s important that &amp;quot;pretty&amp;quot; names are displaying in report output then you might want to use them. But you can also use column aliases to use lower case names in a table and still get pretty names in the output of a query: &amp;lt;tt&amp;gt;select character_name as &amp;quot;Character Name&amp;quot; from foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use BETWEEN (especially with timestamps) ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; uses a closed-interval comparison: the values of both ends of the specified range are included in the result.&lt;br /&gt;
&lt;br /&gt;
This is a particular problem with queries of the form&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol BETWEEN &#039;2018-06-01&#039; AND &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will include results where the timestamp is &#039;&#039;exactly&#039;&#039; 2018-06-08 00:00:00.000000, but not timestamps later in that same day. So the query might seem to work, but as soon as you get an entry exactly on midnight, you&#039;ll end up double-counting it.&lt;br /&gt;
&lt;br /&gt;
Instead, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol &amp;gt;= &#039;2018-06-01&#039; AND timestampcol &amp;lt; &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; is safe for discrete quantities like integers or dates, as long as you remember that both ends of the range are included in the result. But it&#039;s a bad habit to get into.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Date/Time storage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; type to store timestamps, use &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp with time zone&amp;lt;/tt&amp;gt;) instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; records a single moment in time. Despite what the name says it doesn&#039;t store a timestamp, just a point in time described as the number of microseconds since January 1st, 2000 in UTC. You can insert values in any timezone and it&#039;ll store the point in time that value describes. By default it will display times in your current timezone, but you can use &amp;lt;tt&amp;gt;at time zone&amp;lt;/tt&amp;gt; to display it in other time zones.&lt;br /&gt;
&lt;br /&gt;
Because it stores a point in time it will do the right thing with arithmetic involving timestamps entered in different timezones - including between timestamps from the same location on different sides of a daylight savings time change.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp without time zone&amp;lt;/tt&amp;gt;) doesn&#039;t do any of that, it just stores a date and time you give it. You can think of it being a picture of a calendar and a clock rather than a point in time. Without additional information - the timezone - you don&#039;t know what time it records. Because of that, arithmetic between timestamps from different locations or between timestamps from summer and winter may give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
So if what you want to store is a point in time, rather than a picture of a clock, use timestamptz.&lt;br /&gt;
&lt;br /&gt;
[https://it.toolbox.com/blogs/josh-berkus/zone-of-misunderstanding-092811 More about timestamptz].&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re dealing with timestamps in an abstract way, or just saving and retrieving them from an app, where you aren&#039;t going to be doing arithmetic with them then timestamp might be suitable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) to store UTC times ==&lt;br /&gt;
&lt;br /&gt;
Storing UTC values in a &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt; column is, unfortunately, a practice commonly inherited from other databases that lack usable timezone support.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because there is no way for the database to know that UTC is the intended timezone for the column values.&lt;br /&gt;
&lt;br /&gt;
This complicates many otherwise useful time calculations. For example, &amp;quot;last midnight in the timezone given by u.timezone&amp;quot; becomes this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;date_trunc(&#039;day&#039;, now() AT TIME ZONE u.timezone) AT TIME ZONE u.timezone AT TIME ZONE &#039;UTC&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And &amp;quot;the midnight prior to &amp;lt;code&amp;gt;x.datecol&amp;lt;/code&amp;gt; in u.timezone&amp;quot; becomes this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;date_trunc(&#039;day&#039;, x.datecol AT TIME ZONE &#039;UTC&#039; AT TIME ZONE u.timezone)&lt;br /&gt;
   AT TIME ZONE u.timezone AT TIME ZONE &#039;UTC&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If compatibility with non-timezone-supporting databases trumps all other considerations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timetz ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timetz&amp;lt;/tt&amp;gt; type. You probably want &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Even the manual tells you it&#039;s only implemented for SQL compliance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The type time with time zone is defined by the SQL standard, but the definition exhibits properties which lead to questionable usefulness. In most cases, a combination of date, time, timestamp without time zone, and timestamp with time zone should provide a complete range of date/time functionality required by any application.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use CURRENT_TIME ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;code&amp;gt;CURRENT_TIME&amp;lt;/code&amp;gt; function. Use whichever of these is appropriate:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CURRENT_TIMESTAMP&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;now()&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;LOCALTIMESTAMP&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;CURRENT_DATE&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;LOCALTIME&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
It returns a value of type &amp;lt;code&amp;gt;timetz&amp;lt;/code&amp;gt;, for which see the previous entry.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timestamp(0) or timestamptz(0) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use a precision specification, especially not 0, for timestamp columns or casts to timestamp.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;date_trunc(&#039;second&#039;, blah)&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because it rounds off the fractional part rather than truncating it as everyone would expect. This can cause unexpected issues; consider that when you store &amp;lt;code&amp;gt;now()&amp;lt;/code&amp;gt; into such a column, you might be storing a value half a second in the future.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Text storage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use char(n) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;char(n)&amp;lt;/tt&amp;gt;. You probably want &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Any string you insert into a &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; field will be padded with spaces to the declared width. That&#039;s probably not what you actually want.&lt;br /&gt;
&lt;br /&gt;
The manual says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Values of type character are physically padded with spaces to the specified width n, and are stored and displayed that way. However, trailing spaces are treated as semantically insignificant and disregarded when comparing two values of type character. In collations where whitespace is significant, this behavior can produce unexpected results; for example &amp;lt;code&amp;gt;SELECT &#039;a &#039;::CHAR(2) collate &amp;quot;C&amp;quot; &amp;lt; E&#039;a\n&#039;::CHAR(2)&amp;lt;/code&amp;gt; returns true, even though C locale would consider a space to be greater than a newline. Trailing spaces are removed when converting a character value to one of the other string types. Note that trailing spaces are semantically significant in character varying and text values, and when using pattern matching, that is LIKE and regular expressions.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should scare you off it.&lt;br /&gt;
&lt;br /&gt;
The space-padding does waste space, but doesn&#039;t make operations on it any faster; in fact the reverse, thanks to the need to strip spaces in many contexts.&lt;br /&gt;
&lt;br /&gt;
It&#039;s important to note that from a storage point of view &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; &#039;&#039;&#039;is not a fixed-width type&#039;&#039;&#039;. The actual number of bytes varies since characters may take more than one byte, and the stored values are therefore treated as variable-length anyway (even though the space padding is included in the storage).&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re porting very, very old software that uses fixed width fields. Or when you read the snippet from the manual above and think &amp;quot;yes, that makes perfect sense and is a good match for my requirements&amp;quot; rather than gibbering and running away.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use char(n) even for fixed-length identifiers ==&lt;br /&gt;
&lt;br /&gt;
Sometimes people respond to &amp;quot;don&#039;t use &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt;&amp;quot; with &amp;quot;but my values must always be exactly N characters long&amp;quot; (e.g. country codes, hashes, or identifiers from some other system). &#039;&#039;&#039;It is still a bad idea to use &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; even in these cases.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, or a domain over text, with &amp;lt;code&amp;gt;CHECK(length(VALUE)=3)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;CHECK(VALUE ~ &#039;^[[:alpha:]]{3}$&#039;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; or similar.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; doesn&#039;t reject values that are too short, it just silently pads them with spaces. So there&#039;s no actual benefit over using &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; with a constraint that checks for the exact length. As a bonus, such a check can also verify that the value is in the correct format.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;&#039;&#039;there is no performance benefit whatsoever to using &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;varchar(n)&amp;lt;/code&amp;gt;.&#039;&#039;&#039; In fact the reverse is true. One particular problem that comes up is that if you try and compare a &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; field against a parameter where the driver has explicitly specified a type of &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;varchar&amp;lt;/code&amp;gt;, you may be unexpectedly unable to use an index for the comparison. This can be hard to debug since it doesn&#039;t show up on manual queries.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use varchar(n) by default ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; by default. Consider &amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the length limit) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; is a variable width text field that will throw an error if you try and insert a string longer than n characters (not bytes) into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the &amp;lt;tt&amp;gt;(n)&amp;lt;/tt&amp;gt;) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; are similar, but without the length limit. If you insert the same string into the three field types they will take up exactly the same amount of space, and you won&#039;t be able to measure any difference in performance.&lt;br /&gt;
&lt;br /&gt;
If what you really need is a text field with an length limit then varchar(n) is great, but if you pick an arbitrary length and choose varchar(20) for a surname field you&#039;re risking production errors in the future when Hubert Blaine Wolfe­schlegel­stein­hausen­berger­dorff signs up for your service.&lt;br /&gt;
&lt;br /&gt;
Some databases don&#039;t have a type that can hold arbitrary long text, or if they do it&#039;s not as convenient or efficient or well-supported as varchar(n). Users from those databases will often use something like &amp;lt;tt&amp;gt;varchar(255)&amp;lt;/tt&amp;gt; when what they really want is &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you need to constrain the value in a field you probably need something more specific than a maximum length - maybe a minimum length too, or a limited set of characters - and a [https://www.postgresql.org/docs/current/static/ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS check constraint] can do all of those things as well as a maximum string length.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you want to, really. If what you want is a text field that will throw an error if you insert too long a string into it, and you don&#039;t want to use an explicit check constraint then varchar(n) is a perfectly good type. Just don&#039;t use it automatically without thinking about it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other data types =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use money ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;money&amp;lt;/tt&amp;gt; data type isn&#039;t actually very good for storing monetary values. Numeric, or (rarely) integer may be better.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/message-id/flat/20130328092819.237c0106@imp#20130328092819.237c0106@imp lots of reasons.]&lt;br /&gt;
&lt;br /&gt;
It&#039;s a fixed-point type, implemented as a machine int, so arithmetic with it is fast. But it doesn&#039;t handle fractions of a cent (or equivalents in other currencies), it&#039;s rounding behaviour is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t store a currency with the value, rather assuming that all money columns contain the currency specified by the database&#039;s [https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-LC-MONETARY lc_monetary] locale setting. If you change the lc_monetary setting for any reason, all money columns will contain the wrong value. That means that if you insert &#039;$10.00&#039; while lc_monetary is set to &#039;en_US.UTF-8&#039; the value you retrieve may be &#039;10,00 Lei&#039; or &#039;¥1,000&#039; if lc_monetary is changed.&lt;br /&gt;
&lt;br /&gt;
Storing a value as a numeric, possibly with the currency being used in an adjacent column, might be better.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re only working in a single currency, aren&#039;t dealing with fractional cents and are only doing addition and subtraction then money might be the right thing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Deleting_duplicates&amp;diff=33159</id>
		<title>Deleting duplicates</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Deleting_duplicates&amp;diff=33159"/>
		<updated>2019-03-22T19:56:35Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SnippetInfo|Deleting duplicates|version=8.4+|lang=SQL|category=Administrative}}&lt;br /&gt;
&lt;br /&gt;
A frequent question in IRC is how to delete rows that are duplicates over a set of columns, keeping only the one with the lowest ID.&lt;br /&gt;
&lt;br /&gt;
This query does that for all rows of tablename having the same column1, column2, and column3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
DELETE FROM tablename&lt;br /&gt;
WHERE id IN (&lt;br /&gt;
    SELECT&lt;br /&gt;
        id&lt;br /&gt;
    FROM (&lt;br /&gt;
        SELECT&lt;br /&gt;
            id,&lt;br /&gt;
            row_number() OVER w as rnum&lt;br /&gt;
        FROM tablename&lt;br /&gt;
        WINDOW w AS (&lt;br /&gt;
            PARTITION BY column1, column2, column3&lt;br /&gt;
            ORDER BY id&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    ) t&lt;br /&gt;
WHERE t.rnum &amp;gt; 1);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes a timestamptz field is used instead of an ID field.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Foreign_data_wrappers&amp;diff=33135</id>
		<title>Foreign data wrappers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Foreign_data_wrappers&amp;diff=33135"/>
		<updated>2019-03-13T05:35:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Foreign Data Wrappers =&lt;br /&gt;
In 2003, a new specification called [[SQL/MED]] (&amp;quot;SQL Management of External Data&amp;quot;) was added to the SQL standard. It is a standardized way of handling access to remote objects from SQL databases. In 2011, PostgreSQL 9.1 was released with read-only support of this standard, and in 2013 write support was added with PostgreSQL 9.3.&lt;br /&gt;
&lt;br /&gt;
There are now a variety of Foreign Data Wrappers (FDW) available which enable PostgreSQL Server to different remote data stores, ranging from other SQL databases through to flat file. This page list some of the wrappers currently available. Another [https://pgxn.org/tag/fdw/ fdw list] can be found at [https://pgxn.org/ the PGXN website].&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that most of these wrappers are &#039;&#039;&#039;not officially supported by the PostgreSQL Global Development Group&#039;&#039;&#039; (PGDG) and that some of these projects are &#039;&#039;&#039;still in Beta&#039;&#039;&#039; version. Use carefully!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generic SQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|ODBC&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/CartoDB/odbc_fdw  github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CartoDB took over active development of the ODBC FDW for PG 9.5+&lt;br /&gt;
|-&lt;br /&gt;
|JDBC&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/atris/JDBC_FDW github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Not maintained ?&lt;br /&gt;
|-&lt;br /&gt;
|JDBC2&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/heimir-sverrisson/jdbc2_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlalchemy.org/ SQL_Alchemy]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#sqlalchemy-foreign-data-wrapper documentation]&lt;br /&gt;
| Can be used to access data stored in any database supported by the sqlalchemy python toolkit.&lt;br /&gt;
|-&lt;br /&gt;
| VirtDB&lt;br /&gt;
| Native&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/virtdb/virtdb-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A generic FDW to access VirtDB data sources (SAP ERP, Oracle RDBMS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specific SQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.postgresql.org/ PostgreSQL]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://git.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=contrib/postgres_fdw;hb=HEAD  git.postgresql.org]&lt;br /&gt;
|&lt;br /&gt;
|[https://www.postgresql.org/docs/current/postgres-fdw.html  documentation]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.oracle.com/index.html Oracle]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/laurenz/oracle_fdw  github]&lt;br /&gt;
|[https://pgxn.org/dist/oracle_fdw/  PGXN]&lt;br /&gt;
|[http://laurenz.github.io/oracle_fdw/  website]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mysql.com/ MySQL]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/EnterpriseDB/mysql_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/mysql_fdw/ PGXN]&lt;br /&gt;
|[https://www.enterprisedb.com/blog/new-oss-tool-links-postgres-and-mysql example]&lt;br /&gt;
|FDW for MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Informix&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/credativ/informix_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Firebird&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/ibarwick/firebird_fdw/ github]&lt;br /&gt;
|[https://pgxn.org/dist/firebird_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
| currently work-in-progress.&lt;br /&gt;
|-&lt;br /&gt;
|SQLite&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/gleu/sqlite_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|An FDW for SQLite3 (read-only)&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.sqlite.org/index.html SQLite]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/pgspider/sqlite_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/sqlite_fdw PGXN]&lt;br /&gt;
|[https://github.com/pgspider/sqlite_fdw/blob/master/README.md README]&lt;br /&gt;
|An FDW for SQLite3 (write support and several pushdown optimization)&lt;br /&gt;
|-&lt;br /&gt;
|Sybase / MS SQL Server&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/tds-fdw/tds_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/tds_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|An FDW for Sybase and Microsoft SQL server&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.monetdb.org/ MonetDB]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/snaga/monetdb_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NoSQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://cloud.google.com/bigtable/ BigTable or HBase]&lt;br /&gt;
|[https://github.com/posix4e/rpgffi Native Rust Binding (RPGFFI)]&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/durch/google-bigtable-postgres-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://cassandra.apache.org/ Cassandra]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/rankactive/cassandra-fdw Github]&lt;br /&gt;
|[https://rankactive.com/resources/postgresql-cassandra-fdw Rankactive]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Cassandra2&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
|[https://github.com/jaiminpan/cassandra2_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://cassandra.apache.org Cassandra]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
|[https://github.com/wjch-krl/pgCassandra Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://clickhouse.yandex/ ClickHouse]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|BSD&lt;br /&gt;
|[https://github.com/Infinidat/infi.clickhouse_fdw/ Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/Infinidat/infi.clickhouse_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/ZhengYang/couchdb_fdw  Github]&lt;br /&gt;
|[https://pgxn.org/dist/couchdb_fdw/  PGXN]&lt;br /&gt;
|&lt;br /&gt;
| Original version&lt;br /&gt;
|-&lt;br /&gt;
|[http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/golgauth/couchdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| golgauth version (9.1 - 9.2+ compatible)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/griddb/griddb_nosql GridDB]&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/griddb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/pgspider/griddb_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| InfluxDB&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/influxdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/pgspider/influxdb_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://fallabs.com/kyototycoon/ Kyoto Tycoon ]&lt;br /&gt;
|Native&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/cloudflare/kt_fdw  Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mongodb.com/ MongoDB]&lt;br /&gt;
|Native&lt;br /&gt;
|GPL3+&lt;br /&gt;
|[https://github.com/EnterpriseDB/mongo_fdw Github]&lt;br /&gt;
|[https://pgxn.org/dist/mongo_fdw/  PGXN]&lt;br /&gt;
|[https://github.com/EnterpriseDB/mongo_fdw/blob/master/README.md README]&lt;br /&gt;
|EDB version&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mongodb.com/ MongoDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/dwa/mongoose_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mongodb.com/ MongoDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/asya999/yam_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Yet Another Postgres FDW for MongoDB&lt;br /&gt;
|-&lt;br /&gt;
|[https://neo4j.com/ Neo4j]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|GPLv3&lt;br /&gt;
|[https://github.com/sim51/neo4j-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/sim51/neo4j-fdw/blob/master/README.adoc README]&lt;br /&gt;
|FWD for Neo4j and also add a Cypher function to Pg&lt;br /&gt;
|-&lt;br /&gt;
|[https://neo4j.com/ Neo4j]&lt;br /&gt;
|Native&lt;br /&gt;
|?&lt;br /&gt;
|[https://github.com/nuko-yokohama/neo4j_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://quasar-analytics.org/ Quasar]&lt;br /&gt;
|Native&lt;br /&gt;
|Apache&lt;br /&gt;
|[https://github.com/slamdata/quasar-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://redis.io/ Redis]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/pg-redis-fdw/redis_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://redis.io/ Redis]&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/nahanni/rw_redis_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://rethinkdb.com/ RethinkDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/rotten/rethinkdb-multicorn-postgresql-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://rethinkdb.com/blog/postgres-foreign-data-wrapper/ blog]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/basho/riak Riak]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/kiskovacs/riak-multicorn-pg-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://whitedb.org/ WhiteDB]&lt;br /&gt;
|  Native&lt;br /&gt;
|  MIT&lt;br /&gt;
| [https://github.com/Kentik/wdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| CSV&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
|[https://git.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=contrib/file_fdw;hb=HEAD  git.postgresql.org]&lt;br /&gt;
|&lt;br /&gt;
| [https://www.postgresql.org/docs/current/file-fdw.html  documentation]&lt;br /&gt;
| Delivered as an official extension of PostgreSQL 9.1 / [https://www.depesz.com/2011/03/14/waiting-for-9-1-foreign-data-wrapper/  example] /  [http://www.postgresonline.com/journal/archives/250-File-FDW-Family-Part-1-file_fdw.html Another example]&lt;br /&gt;
|-&lt;br /&gt;
| CSV&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#csv-foreign-data-wrapper documentation]&lt;br /&gt;
| Each column defined in the table will be mapped, in order, against columns in the CSV file.&lt;br /&gt;
|-&lt;br /&gt;
| CSV / Text Array&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/adunstan/file_text_array_fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [http://www.postgresonline.com/journal/archives/251-File-FDW-Family-Part-2-file_textarray_fdw-Foreign-Data-Wrapper.html How to]&lt;br /&gt;
| Another CSV wrapper&lt;br /&gt;
|-&lt;br /&gt;
| CSV / Fixed-length&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/adunstan/file_fixed_length_record_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CSV / gzipped&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/dialogbox/py_csvgz_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| PostgreSQL Foreign Data Wrapper for gzipped cvs file&lt;br /&gt;
|-&lt;br /&gt;
| Compressed File&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/gokhankici/compressedfile_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Document Collection&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/ZhengYang/dc_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/ZhengYang/dc_fdw/wiki wiki]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JSON&lt;br /&gt;
| Native&lt;br /&gt;
| GPL3&lt;br /&gt;
| [https://github.com/nkhorman/json_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://www.citusdata.com/blog/2013/05/30/run-sql-on-json-files-without-any-data-loads/ Example]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Multi-File&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#filesystem-foreign-data-wrapper doc]&lt;br /&gt;
| Access data stored in various files in a filesystem. The files are looked up based on a pattern, and parts of the file&#039;s path are mapped to various columns, as well as the file&#039;s content itself.&lt;br /&gt;
|-&lt;br /&gt;
| Multi CDR&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/theirix/multicdr_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicdr_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pg_dump&lt;br /&gt;
| Native&lt;br /&gt;
| New BSD&lt;br /&gt;
| [https://github.com/MeetMe/dump_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Allows querying of data directly against Postgres custom format files created by pg_dump&lt;br /&gt;
|-&lt;br /&gt;
| TAR Files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/beargiles/tarfile-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| XML&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ZIP Files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/beargiles/zipfile-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Geo Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.gdal.org GDAL/OGR]&lt;br /&gt;
|Native&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/pramsey/pgsql-ogr-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|A wrapper for data sources with a [https://www.gdal.org GDAL/OGR] driver, including databases like Oracle, Informix, SQLite, SQL Server, ODBC as well as file formats like Shape, FGDB, MapInfo, CSV, Excel, OpenOffice, OpenStreetMap PBF and XML, OGC WebServices, [https://www.gdal.org/ogr_formats.html and more] Spatial columns are linked in as PostGIS geometry if PostGIS is installed.&lt;br /&gt;
|-&lt;br /&gt;
| Geocode / GeoJSON&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/bosth/geofdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| a collection of PostGIS-related foreign data wrappers&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.openstreetmap.org/wiki/PBF_Format Open Street Map PBF]&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/vpikulik/postgres_osm_pbf_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LDAP Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/guedes/ldap_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/ldap_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
| Allows to query an LDAP server and retrieve data from some pre-configured Organizational Unit&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idldap-foreign-data-wrapper documentation]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Generic Web Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Git&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Git&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/franckverrot/git_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ICAL&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/Multicorn/blob/master/python/multicorn/icalfdw.py GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://wiki.postgresql.org/images/7/7e/Conferences-write_a_foreign_data_wrapper_in_15_minutes-presentation.pdf pdf]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| IMAP&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idimap-foreign-data-wrapper documentation]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| RSS&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idrss-foreign-data-wrapper documentation]&lt;br /&gt;
| This fdw can be used to access items from an rss feed.&lt;br /&gt;
|-&lt;br /&gt;
| www&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/cyga/www_fdw/ GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/www_fdw/ PGXN]&lt;br /&gt;
| [https://github.com/cyga/www_fdw/wiki wiki]&lt;br /&gt;
| Allows to query different web services&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specific Web Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Database.com&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/metadaddy/Database.com-FDW-for-PostgreSQL GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Dun &amp;amp; Badstreet&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/dpmorel/dnb_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Access to the [https://fr.wikipedia.org/wiki/Data_Universal_Numbering_System Data Universal Numbering System] (DUNS)&lt;br /&gt;
|-&lt;br /&gt;
| DynamoDB&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/avances123/dynamodb_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Facebook&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/mrwilson/fb-psql GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Fixer.io&lt;br /&gt;
| based on www_fdw&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/hakanensari/frankfurter GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Google&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Heroku dataclips&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/petergeoghegan/dataclips_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Keycloak&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/schne324/foreign-keycloak-wrapper GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/foreign-keycloak-wrapper/ PGXN]&lt;br /&gt;
| [https://github.com/schne324/foreign-keycloak-wrapper/blob/master/README.md README]&lt;br /&gt;
| Direct database integration with the [https://www.keycloak.org Keycloak] open-source Identity/Access Management solution.&lt;br /&gt;
|-&lt;br /&gt;
| Mailchimp&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/mailchimp_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Beta&lt;br /&gt;
|-&lt;br /&gt;
| [http://parseplatform.org/ Parse]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/spacialdb/parse_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| S3&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/umitanuki/s3_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/s3_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| S3CSV&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL 3&lt;br /&gt;
| [https://github.com/eligoenergy/s3csv_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| This is meant to replace s3_fdw that does is not supported on PostgreSQL version 9.2+&lt;br /&gt;
|-&lt;br /&gt;
| Telegram&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/guedes/telegram_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| telegram_fdw is a Telegram BOT implemented using the PostgreSQL foreign data wrapper interface.&lt;br /&gt;
|-&lt;br /&gt;
| Twitter&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/umitanuki/twitter_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/twitter_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
| A wrapper fetching text messages from Twitter over the Internet and returning a table&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.treasuredata.com/ Treasure Data]&lt;br /&gt;
| Native&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/komamitsu/treasuredata_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/treasuredata_fdw PGXN]&lt;br /&gt;
|&lt;br /&gt;
| A FDW for Treasure Data internally using a Rust library&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.treasuredata.com/ Treasure Data]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/komamitsu/td-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Google Spreadsheets&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/lincolnturner/gspreadsheet_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Big Data Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Elastic Search&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
|[https://github.com/Mikulas/pg-es-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Google BigQuery&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
|[https://github.com/gabfl/bigquery_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/gabfl/bigquery_fdw/blob/master/docs/README.md Documentation]&lt;br /&gt;
|bigquery_fdw is a BigQuery FDW compatible with PostgreSQL &amp;gt;= 9.5&lt;br /&gt;
|-&lt;br /&gt;
| file_fdw-gds (Hadoop)&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/wat4dog/pg-file-fdw-gds  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Hadoop file_fdw is a slightly modified version of PostgreSQL 9.3&#039;s file_fdw module.&lt;br /&gt;
|-&lt;br /&gt;
| Hadoop&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://www.openscg.com/bigsql/hadoopfdw/  Bitbucket]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Allows read and write access to HBase as well as to HDFS via Hive.&lt;br /&gt;
|-&lt;br /&gt;
| HDFS&lt;br /&gt;
| Native&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/EnterpriseDB/hdfs_fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hive&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/youngwookim/hive-fdw-for-postgresql   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Used to access Apache Hive tables.&lt;br /&gt;
|-&lt;br /&gt;
| Hive / ORC File&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/gokhankici/orc_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://impala.apache.org/ Impala]&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/lapug/impala_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Column-Oriented Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Columnar Store&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/citusdata/cstore_fdw  github]&lt;br /&gt;
|[https://www.citusdata.com/blog/2014/04/03/columnar-store-for-analytics/ example]&lt;br /&gt;
|&lt;br /&gt;
|A Columnar Store for PostgreSQL.&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.monetdb.org/ MonetDB]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/snaga/monetdb_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GPU Memory Store&lt;br /&gt;
|Native&lt;br /&gt;
|GPL v2&lt;br /&gt;
|[https://github.com/heterodb/pg-strom github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FDW to GPU device memory; a part of PG-Strom feature for PL/CUDA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scientific Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Ambry&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/nmb10/ambryfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ROOT files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/miguel-branco/root_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| https://root.cern.ch&lt;br /&gt;
|-&lt;br /&gt;
| VCF files (Genotype)&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/smithijk/vcf_fdw_postgresql  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| https://en.wikipedia.org/wiki/Variant_Call_Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operating System Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Docker&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Expat&lt;br /&gt;
| [https://github.com/paultag/dockerfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Log files&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/rdunklau/logfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| OpenStack / Telemetry&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/CSCfi/telemetry-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| OS Query&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/shish/pgosquery GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Like Facebook&#039;s OSQuery, but for Postgres&lt;br /&gt;
|-&lt;br /&gt;
| Passwd&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/beargiles/passwd-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| reads linux/unix password and group files.&lt;br /&gt;
|-&lt;br /&gt;
| Process&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn/blob/master/python/multicorn/processfdw.py GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A foreign datawrapper for querying system stats based on [https://libstatgrab.org/ statgrab]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Exotic Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| faker_fdw&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/guedes/faker_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| faker_fdw is a foreign data wrapper for PostgreSQL that generates fake data.&lt;br /&gt;
|-&lt;br /&gt;
| fdw_fdw&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/fdw_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| the Meta FDW ! reads this page and returns the list of all the FDW&lt;br /&gt;
|-&lt;br /&gt;
| PGStrom&lt;br /&gt;
| Native&lt;br /&gt;
| GPL 2&lt;br /&gt;
| [https://github.com/heterodb/pg-strom GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [http://wiki.postgresql.org/wiki/PGStrom wiki]&lt;br /&gt;
| uses GPU devices to accelarate sequential scan on massive amount of records with complex qualifiers. Now it moved to CustomScan based implementation, so its core logic no longer uses FDW.&lt;br /&gt;
|-&lt;br /&gt;
| PPG&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/scarbrofair/ppg_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| distributed parallel query engine, based on fdw and hooks of PG&lt;br /&gt;
|-&lt;br /&gt;
| Open Civic Data&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Expat&lt;br /&gt;
| [https://github.com/paultag/sunlightfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www2.meethue.com/en-us/philips-hue-benefits Phillips Hue Lighting Systems]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/rotten/hue-multicorn-postgresql-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Random Number&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/yieldsfalsehood/rng_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A random number generator foreign data wrapper for postgres&lt;br /&gt;
|-&lt;br /&gt;
| Rotfang&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Native&lt;br /&gt;
| [https://bitbucket.org/adunstan/rotfang-fdw BitBucket]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://drive.google.com/file/d/0B3XVAFFWEFN0aURac0dzSFQyZzA/view slides]&lt;br /&gt;
| Advanced random number generator&lt;br /&gt;
|-&lt;br /&gt;
| Template Tables&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/okbob/template_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| PostgreSQL data wrapper for template tables - any DML and SELECT operations are disallowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Dummy&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/slaught/dummy_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Readable null FDW for testing&lt;br /&gt;
|-&lt;br /&gt;
| Hello World&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/wikrsh/hello_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Black Hole&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [https://bitbucket.org/adunstan/blackhole_fdw bitbucket]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| a skeleton FDW pre-populated with relevant excerpts from the documentation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Writing Foreign Database Wrappers=&lt;br /&gt;
&lt;br /&gt;
* [https://multicorn.org/ Multicorn] is an extension that allows you to write FDWs in Python&lt;br /&gt;
* [https://github.com/franckverrot/holycorn Holycorn] is an extension that allows you to write FDWs in Ruby&lt;br /&gt;
* [https://www.postgresql.org/docs/current/fdwhandler.html Documentation: Writing a Foreign Data Wrapper]&lt;br /&gt;
* [https://bitbucket.org/adunstan/blackhole_fdw Black Hole FDW] - a skeleton FDW pre-populated with relevant excerpts from the documentation&lt;br /&gt;
* [http://blog.guillaume.lelarge.info/index.php/post/2013/06/25/The-handler-and-the-validator-functions-of-a-FDW FDW tutorial by Guillaume Lelarge]&lt;br /&gt;
* [https://github.com/nautilebleu/django-fdw django-fdw] A sample project to test django and Postgres Foreign Data Wrapper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Foreign-data wrapper|!]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=33082</id>
		<title>Don&#039;t Do This</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=33082"/>
		<updated>2019-02-20T17:38:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A short list of common mistakes.&lt;br /&gt;
&lt;br /&gt;
= Database Encoding =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use SQL_ASCII ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
While the name suggests that this encoding is in some meaningful way related to ASCII, it is not. Instead, it simply forbids the use of NUL bytes.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
= Tool usage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use psql -W or --password ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;tt&amp;gt;psql -W&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;psql --password&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Using the --password or -W flags will tell [https://www.postgresql.org/docs/current/static/reference-client.html psql] to prompt you for a password, before trying to connect to the server - so you&#039;ll be prompted for a password even if the server doesn&#039;t require one.&lt;br /&gt;
&lt;br /&gt;
It&#039;s never required, as if the server does require a password psql will prompt you for one, and it can be very confusing when setting up permissions. If you&#039;re connecting with -W to a server configured to allow you access via &amp;lt;tt&amp;gt;peer&amp;lt;/tt&amp;gt; authentication you may think that it&#039;s requiring a password when it really isn&#039;t. And if the user you&#039;re logging in as doesn&#039;t have a password set or you enter the wrong password at the prompt you&#039;ll still be logged in and think you have the right password - but you won&#039;t be able to log in from other clients (that connect via localhost) or when logged in as other users.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never, pretty much. It will save a round trip to the server but that&#039;s about it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use rules ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use [https://www.postgresql.org/docs/current/static/sql-createrule.html rules]. If you think you want to, use a [https://www.postgresql.org/docs/current/static/plpgsql-trigger.html trigger] instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Rules are incredibly powerful, but they don&#039;t do what they look like they do. They look like they&#039;re some conditional logic, but they actually rewrite a query to modify it or add additional queries to it.&lt;br /&gt;
&lt;br /&gt;
That means that [http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/ all non-trivial rules are incorrect].&lt;br /&gt;
&lt;br /&gt;
Depesz has [https://www.depesz.com/2010/06/15/to-rule-or-not-to-rule-that-is-the-question/ more to say] about them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never. While the rewriter is an implementation detail of VIEWs, there is no reason to pry up this cover plate directly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SQL constructs =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use NOT IN ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt;, or any combination of &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; such as &amp;lt;code&amp;gt;NOT (x IN (select…))&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
(If you think you wanted &amp;lt;code&amp;gt;NOT IN (select …)&amp;lt;/code&amp;gt; then you should rewrite to use &amp;lt;code&amp;gt;NOT EXISTS&amp;lt;/code&amp;gt; instead.)&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Two reasons:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt; behaves in unexpected ways if there is a null present:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (1,null); -- always returns 0 rows&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (select x from bar);&lt;br /&gt;
   -- returns 0 rows if any value of bar.x is null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because &amp;lt;code&amp;gt;col IN (1,null)&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; if col=1, and &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; otherwise (i.e. it can never return &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;). Since &amp;lt;code&amp;gt;NOT (TRUE)&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;, but &amp;lt;code&amp;gt;NOT (NULL)&amp;lt;/code&amp;gt; is still &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;, there is no way that &amp;lt;code&amp;gt;NOT (col IN (1,null))&amp;lt;/code&amp;gt; (which is the same thing as &amp;lt;code&amp;gt;col NOT IN (1,null)&amp;lt;/code&amp;gt;) can return &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; under any circumstances.&lt;br /&gt;
&lt;br /&gt;
2. Because of point 1 above, &amp;lt;code&amp;gt;NOT IN (SELECT ...)&amp;lt;/code&amp;gt; does not optimize very well. In particular, the planner can&#039;t transform it into an anti-join, and so it becomes either a hashed Subplan or a plain Subplan. The hashed subplan is fast, but the planner only allows that plan for small result sets; the plain subplan is &#039;&#039;&#039;horrifically&#039;&#039;&#039; slow (in fact O(N²)). This means that the performance can look good in small-scale tests but then slow down by 5 or more orders of magnitude once a size threshold is crossed; you &#039;&#039;&#039;do not&#039;&#039;&#039; want this to happen.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NOT IN (&amp;lt;i&amp;gt;list,of,values,...&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; is mostly safe &#039;&#039;unless&#039;&#039; you might have a null in the list (via a parameter or otherwise). So it&#039;s sometimes natural and even advisable to use it when excluding specific constant values from a query result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use upper case table or column names ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use NamesLikeThis, use names_like_this.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds all names - of tables, columns, functions and everything else - to lower case unless they&#039;re &amp;quot;double quoted&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So &amp;lt;tt&amp;gt;create table Foo()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;foo&amp;lt;/tt&amp;gt;, while &amp;lt;tt&amp;gt;create table &amp;quot;Bar&amp;quot;()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;Bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These select commands will work: &amp;lt;tt&amp;gt;select * from Foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from &amp;quot;Bar&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These will fail with &amp;quot;no such table&amp;quot;: &amp;lt;tt&amp;gt;select * from &amp;quot;Foo&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from Bar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This means that if you use uppercase characters in your table or column names you have to either &#039;&#039;always&#039;&#039; double quote them or &#039;&#039;never&#039;&#039; double quote them. That&#039;s annoying enough by hand, but when you start using other tools to access the database, some of which always quote all names and some don&#039;t, it gets very confusing.&lt;br /&gt;
&lt;br /&gt;
Stick to using a-z, 0-9 and underscore for names and you never have to worry about quoting them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If it&#039;s important that &amp;quot;pretty&amp;quot; names are displaying in report output then you might want to use them. But you can also use column aliases to use lower case names in a table and still get pretty names in the output of a query: &amp;lt;tt&amp;gt;select character_name as &amp;quot;Character Name&amp;quot; from foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use BETWEEN (especially with timestamps) ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; uses a closed-interval comparison: the values of both ends of the specified range are included in the result.&lt;br /&gt;
&lt;br /&gt;
This is a particular problem with queries of the form&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol BETWEEN &#039;2018-06-01&#039; AND &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will include results where the timestamp is &#039;&#039;exactly&#039;&#039; 2018-06-08 00:00:00.000000, but not timestamps later in that same day. So the query might seem to work, but as soon as you get an entry exactly on midnight, you&#039;ll end up double-counting it.&lt;br /&gt;
&lt;br /&gt;
Instead, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol &amp;gt;= &#039;2018-06-01&#039; AND timestampcol &amp;lt; &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; is safe for discrete quantities like integers or dates, as long as you remember that both ends of the range are included in the result. But it&#039;s a bad habit to get into.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Date/Time storage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; type to store timestamps, use &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp with time zone&amp;lt;/tt&amp;gt;) instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; records a single moment in time. Despite what the name says it doesn&#039;t store a timestamp, just a point in time described as the number of microseconds since January 1st, 2000 in UTC. You can insert values in any timezone and it&#039;ll store the point in time that value describes. By default it will display times in your current timezone, but you can use &amp;lt;tt&amp;gt;at time zone&amp;lt;/tt&amp;gt; to display it in other time zones.&lt;br /&gt;
&lt;br /&gt;
Because it stores a point in time it will do the right thing with arithmetic involving timestamps entered in different timezones - including between timestamps from the same location on different sides of a daylight savings time change.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp without time zone&amp;lt;/tt&amp;gt;) doesn&#039;t do any of that, it just stores a date and time you give it. You can think of it being a picture of a calendar and a clock rather than a point in time. Without additional information - the timezone - you don&#039;t know what time it records. Because of that, arithmetic between timestamps from different locations or between timestamps from summer and winter may give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
So if what you want to store is a point in time, rather than a picture of a clock, use timestamptz.&lt;br /&gt;
&lt;br /&gt;
[https://it.toolbox.com/blogs/josh-berkus/zone-of-misunderstanding-092811 More about timestamptz].&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re dealing with timestamps in an abstract way, or just saving and retrieving them from an app, where you aren&#039;t going to be doing arithmetic with them then timestamp might be suitable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) to store UTC times ==&lt;br /&gt;
&lt;br /&gt;
Storing UTC values in a &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt; column is, unfortunately, a practice commonly inherited from other databases that lack usable timezone support.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because there is no way for the database to know that UTC is the intended timezone for the column values.&lt;br /&gt;
&lt;br /&gt;
This complicates many otherwise useful time calculations. For example, &amp;quot;last midnight in the timezone given by u.timezone&amp;quot; becomes this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;date_trunc(&#039;day&#039;, now() AT TIME ZONE u.timezone) AT TIME ZONE u.timezone AT TIME ZONE &#039;UTC&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And &amp;quot;the midnight prior to &amp;lt;code&amp;gt;x.datecol&amp;lt;/code&amp;gt; in u.timezone&amp;quot; becomes this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;date_trunc(&#039;day&#039;, x.datecol AT TIME ZONE &#039;UTC&#039; AT TIME ZONE u.timezone)&lt;br /&gt;
   AT TIME ZONE u.timezone AT TIME ZONE &#039;UTC&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If compatibility with non-timezone-supporting databases trumps all other considerations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timetz ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timetz&amp;lt;/tt&amp;gt; type. You probably want &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Even the manual tells you it&#039;s only implemented for SQL compliance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The type time with time zone is defined by the SQL standard, but the definition exhibits properties which lead to questionable usefulness. In most cases, a combination of date, time, timestamp without time zone, and timestamp with time zone should provide a complete range of date/time functionality required by any application.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use CURRENT_TIME ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;code&amp;gt;CURRENT_TIME&amp;lt;/code&amp;gt; function. Use whichever of these is appropriate:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CURRENT_TIMESTAMP&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;now()&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;timestamp with time zone&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;LOCALTIMESTAMP&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;timestamp without time zone&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;CURRENT_DATE&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;,&lt;br /&gt;
* &amp;lt;code&amp;gt;LOCALTIME&amp;lt;/code&amp;gt; if you want a &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
It returns a value of type &amp;lt;code&amp;gt;timetz&amp;lt;/code&amp;gt;, for which see the previous entry.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use timestamp(0) or timestamptz(0) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use a precision specification, especially not 0, for timestamp columns or casts to timestamp.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;date_trunc(&#039;second&#039;, blah)&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because it rounds off the fractional part rather than truncating it as everyone would expect. This can cause unexpected issues; consider that when you store &amp;lt;code&amp;gt;now()&amp;lt;/code&amp;gt; into such a column, you might be storing a value half a second in the future.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Text storage =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use char(n) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;char(n)&amp;lt;/tt&amp;gt;. You probably want &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Any string you insert into a &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; field will be padded with spaces to the declared width. That&#039;s probably not what you actually want.&lt;br /&gt;
&lt;br /&gt;
The manual says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Values of type character are physically padded with spaces to the specified width n, and are stored and displayed that way. However, trailing spaces are treated as semantically insignificant and disregarded when comparing two values of type character. In collations where whitespace is significant, this behavior can produce unexpected results; for example &amp;lt;code&amp;gt;SELECT &#039;a &#039;::CHAR(2) collate &amp;quot;C&amp;quot; &amp;lt; E&#039;a\n&#039;::CHAR(2)&amp;lt;/code&amp;gt; returns true, even though C locale would consider a space to be greater than a newline. Trailing spaces are removed when converting a character value to one of the other string types. Note that trailing spaces are semantically significant in character varying and text values, and when using pattern matching, that is LIKE and regular expressions.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should scare you off it.&lt;br /&gt;
&lt;br /&gt;
The space-padding does waste space, but doesn&#039;t make operations on it any faster; in fact the reverse, thanks to the need to strip spaces in many contexts.&lt;br /&gt;
&lt;br /&gt;
It&#039;s important to note that from a storage point of view &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; &#039;&#039;&#039;is not a fixed-width type&#039;&#039;&#039;. The actual number of bytes varies since characters may take more than one byte, and the stored values are therefore treated as variable-length anyway (even though the space padding is included in the storage).&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re porting very, very old software that uses fixed width fields. Or when you read the snippet from the manual above and think &amp;quot;yes, that makes perfect sense and is a good match for my requirements&amp;quot; rather than gibbering and running away.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
== Don&#039;t use char(n) even for fixed-length identifiers ==&lt;br /&gt;
&lt;br /&gt;
Sometimes people respond to &amp;quot;don&#039;t use &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt;&amp;quot; with &amp;quot;but my values must always be exactly N characters long&amp;quot; (e.g. country codes, hashes, or identifiers from some other system). &#039;&#039;&#039;It is still a bad idea to use &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; even in these cases.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, or a domain over text, with &amp;lt;code&amp;gt;CHECK(length(VALUE)=3)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;CHECK(VALUE ~ &#039;^[[:alpha:]]{3}$&#039;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; or similar.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; doesn&#039;t reject values that are too short, it just silently pads them with spaces. So there&#039;s no actual benefit over using &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; with a constraint that checks for the exact length. As a bonus, such a check can also verify that the value is in the correct format.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;&#039;&#039;there is no performance benefit whatsoever to using &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;varchar(n)&amp;lt;/code&amp;gt;.&#039;&#039;&#039; In fact the reverse is true. One particular problem that comes up is that if you try and compare a &amp;lt;code&amp;gt;char(n)&amp;lt;/code&amp;gt; field against a parameter where the driver has explicitly specified a type of &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;varchar&amp;lt;/code&amp;gt;, you may be unexpectedly unable to use an index for the comparison. This can be hard to debug since it doesn&#039;t show up on manual queries.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;!----------------------------------------------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use varchar(n) by default ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; by default. Consider &amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the length limit) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; is a variable width text field that will throw an error if you try and insert a string longer than n characters (not bytes) into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the &amp;lt;tt&amp;gt;(n)&amp;lt;/tt&amp;gt;) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; are similar, but without the length limit. If you insert the same string into the three field types they will take up exactly the same amount of space, and you won&#039;t be able to measure any difference in performance.&lt;br /&gt;
&lt;br /&gt;
If what you really need is a text field with an length limit then varchar(n) is great, but if you pick an arbitrary length and choose varchar(20) for a surname field you&#039;re risking production errors in the future when Hubert Blaine Wolfe­schlegel­stein­hausen­berger­dorff signs up for your service.&lt;br /&gt;
&lt;br /&gt;
Some databases don&#039;t have a type that can hold arbitrary long text, or if they do it&#039;s not as convenient or efficient or well-supported as varchar(n). Users from those databases will often use something like &amp;lt;tt&amp;gt;varchar(255)&amp;lt;/tt&amp;gt; when what they really want is &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you need to constrain the value in a field you probably need something more specific than a maximum length - maybe a minimum length too, or a limited set of characters - and a [https://www.postgresql.org/docs/current/static/ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS check constraint] can do all of those things as well as a maximum string length.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you want to, really. If what you want is a text field that will throw an error if you insert too long a string into it, and you don&#039;t want to use an explicit check constraint then varchar(n) is a perfectly good type. Just don&#039;t use it automatically without thinking about it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other data types =&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use money ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;money&amp;lt;/tt&amp;gt; data type isn&#039;t actually very good for storing monetary values. Numeric, or (rarely) integer may be better.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/message-id/flat/20130328092819.237c0106@imp#20130328092819.237c0106@imp lots of reasons.]&lt;br /&gt;
&lt;br /&gt;
It&#039;s a fixed-point type, implemented as a machine int, so arithmetic with it is fast. But it doesn&#039;t handle fractions of a cent (or equivalents in other currencies), it&#039;s rounding behaviour is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t store a currency with the value, rather assuming that all money columns contain the currency specified by the database&#039;s [https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-LC-MONETARY lc_monetary] locale setting. If you change the lc_monetary setting for any reason, all money columns will contain the wrong value. That means that if you insert &#039;$10.00&#039; while lc_monetary is set to &#039;en_US.UTF-8&#039; the value you retrieve may be &#039;10,00 Lei&#039; or &#039;¥1,000&#039; if lc_monetary is changed.&lt;br /&gt;
&lt;br /&gt;
Storing a value as a numeric, possibly with the currency being used in an adjacent column, might be better.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re only working in a single currency, aren&#039;t dealing with fractional cents and are only doing addition and subtraction then money might be the right thing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--====================================================================================================--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Index_Maintenance&amp;diff=32975</id>
		<title>Index Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Index_Maintenance&amp;diff=32975"/>
		<updated>2019-01-15T21:36:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Index summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
One day, you will probably need to cope with [http://www.postgresql.org/docs/current/static/routine-reindex.html routine reindexing] on your database, particularly if you don&#039;t use VACUUM aggressively enough.  A particularly handy command in this area is [http://www.postgresql.org/docs/8.3/static/sql-cluster.html CLUSTER], which can help with other types of cleanup.&lt;br /&gt;
&lt;br /&gt;
Avoid using [[VACUUM FULL]] in versions 8.4 and earlier.&lt;br /&gt;
&lt;br /&gt;
== Index summary ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a sample query to pull the number of rows, indexes, and some info about those indexes for each table.  Ditch the pg_size_pretty if you’re on an ancient (&amp;lt;= 8.2) version)&lt;br /&gt;
&lt;br /&gt;
{{SnippetInfo|Index summary|lang=SQL|version=&amp;gt;=8.1|category=Performance}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    pg_class.relname,&lt;br /&gt;
    pg_size_pretty(pg_class.reltuples::bigint) AS rows_in_bytes,&lt;br /&gt;
    pg_class.reltuples AS num_rows,&lt;br /&gt;
    count(indexname) AS number_of_indexes,&lt;br /&gt;
    CASE WHEN x.is_unique = 1 THEN &#039;Y&#039;&lt;br /&gt;
       ELSE &#039;N&#039;&lt;br /&gt;
    END AS UNIQUE,&lt;br /&gt;
    SUM(case WHEN number_of_columns = 1 THEN 1&lt;br /&gt;
              ELSE 0&lt;br /&gt;
            END) AS single_column,&lt;br /&gt;
    SUM(case WHEN number_of_columns IS NULL THEN 0&lt;br /&gt;
             WHEN number_of_columns = 1 THEN 0&lt;br /&gt;
             ELSE 1&lt;br /&gt;
           END) AS multi_column&lt;br /&gt;
FROM pg_namespace &lt;br /&gt;
LEFT OUTER JOIN pg_class ON pg_namespace.oid = pg_class.relnamespace&lt;br /&gt;
LEFT OUTER JOIN&lt;br /&gt;
       (SELECT indrelid,&lt;br /&gt;
           max(CAST(indisunique AS integer)) AS is_unique&lt;br /&gt;
       FROM pg_index&lt;br /&gt;
       GROUP BY indrelid) x&lt;br /&gt;
       ON pg_class.oid = x.indrelid&lt;br /&gt;
LEFT OUTER JOIN&lt;br /&gt;
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns FROM pg_index x&lt;br /&gt;
           JOIN pg_class c ON c.oid = x.indrelid&lt;br /&gt;
           JOIN pg_class ipg ON ipg.oid = x.indexrelid  )&lt;br /&gt;
    AS foo&lt;br /&gt;
    ON pg_class.relname = foo.ctablename&lt;br /&gt;
WHERE &lt;br /&gt;
     pg_namespace.nspname=&#039;public&#039;&lt;br /&gt;
AND  pg_class.relkind = &#039;r&#039;&lt;br /&gt;
GROUP BY pg_class.relname, pg_class.reltuples, x.is_unique&lt;br /&gt;
ORDER BY 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index size/usage statistics ==&lt;br /&gt;
&lt;br /&gt;
Table &amp;amp; index sizes along which indexes are being scanned and how many tuples are fetched.  See [[Disk Usage]] for another view that includes both table and index sizes.&lt;br /&gt;
&lt;br /&gt;
{{SnippetInfo|Index statistics|lang=SQL|version=&amp;gt;=8.1|category=Performance}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    t.tablename,&lt;br /&gt;
    indexname,&lt;br /&gt;
    c.reltuples AS num_rows,&lt;br /&gt;
    pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,&lt;br /&gt;
    pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,&lt;br /&gt;
    CASE WHEN indisunique THEN &#039;Y&#039;&lt;br /&gt;
       ELSE &#039;N&#039;&lt;br /&gt;
    END AS unique,&lt;br /&gt;
    idx_scan AS number_of_scans,&lt;br /&gt;
    idx_tup_read AS tuples_read,&lt;br /&gt;
    idx_tup_fetch AS tuples_fetched&lt;br /&gt;
FROM pg_tables t&lt;br /&gt;
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname&lt;br /&gt;
LEFT OUTER JOIN&lt;br /&gt;
    ( SELECT c.relname as ctablename, ipg.relname as indexname, x.indnatts as number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x&lt;br /&gt;
           JOIN pg_class c ON c.oid = x.indrelid&lt;br /&gt;
           JOIN pg_class ipg ON ipg.oid = x.indexrelid&lt;br /&gt;
           JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid AND psai.schemaname = &#039;public&#039; )&lt;br /&gt;
    as foo&lt;br /&gt;
    ON t.tablename = foo.ctablename&lt;br /&gt;
WHERE t.schemaname=&#039;public&#039;&lt;br /&gt;
order by 1,2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate indexes ==&lt;br /&gt;
Finds multiple indexes that have the same set of columns, same opclass, expression and predicate -- which make them equivalent. &#039;&#039;&#039;Usually&#039;&#039;&#039; it&#039;s safe to drop one of them, but I give no guarantees. :)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT pg_size_pretty(sum(pg_relation_size(idx))::bigint) as size,&lt;br /&gt;
       (array_agg(idx))[1] as idx1, (array_agg(idx))[2] as idx2,&lt;br /&gt;
       (array_agg(idx))[3] as idx3, (array_agg(idx))[4] as idx4&lt;br /&gt;
FROM (&lt;br /&gt;
    SELECT indexrelid::regclass as idx, (indrelid::text ||E&#039;\n&#039;|| indclass::text ||E&#039;\n&#039;|| indkey::text ||E&#039;\n&#039;||&lt;br /&gt;
                                         coalesce(indexprs::text,&#039;&#039;)||E&#039;\n&#039; || coalesce(indpred::text,&#039;&#039;)) as key&lt;br /&gt;
    FROM pg_index) sub&lt;br /&gt;
GROUP BY key HAVING count(*)&amp;gt;1&lt;br /&gt;
ORDER BY sum(pg_relation_size(idx)) DESC;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index Bloat ==&lt;br /&gt;
&lt;br /&gt;
=== Based on check_postgres ===&lt;br /&gt;
&lt;br /&gt;
One of the common needs for a REINDEX is when indexes become bloated due to either sparse deletions or use of VACUUM FULL (with pre 9.0 versions).  An estimator for the amount of bloat in a table has been included in the [http://bucardo.org/wiki/Check_postgres check_postgres] script, which you can call directly or incorporate into a larger monitoring system.  Scripts based on this code and/or its concepts from other sources include:&lt;br /&gt;
* [https://web.archive.org/web/20080603000756/http://pgsql.tapoueh.org/site/html/news/20080131.bloat.html bloat view] (Dimitri Fontaine) - extracted from check_postgres&lt;br /&gt;
* [http://www.pgcon.org/2009/schedule/events/153.en.html Visualizing Postgres] - index_byte_sizes view (Michael Glaesemann, myYearbook)&lt;br /&gt;
* [http://labs.omniti.com/trac/pgtreats/browser/trunk/tools OmniTI Tasty Treats for PostgreSQL] - shell and Perl pg_bloat_report scripts&lt;br /&gt;
&lt;br /&gt;
=== New query ===&lt;br /&gt;
&lt;br /&gt;
A new query has been created to have a better bloat estimate for Btree indexes. Unlike the query from check_postgres, this one focus only on BTree index its disk layout.&lt;br /&gt;
&lt;br /&gt;
See [http://blog.ioguix.net/tag/bloat/ articles] about it. &lt;br /&gt;
&lt;br /&gt;
The monitoring script [https://github.com/OPMDG/check_pgactivity check_pgactivity] is including a check based on this work.&lt;br /&gt;
&lt;br /&gt;
=== Summarize keyspace of a B-Tree index ===&lt;br /&gt;
&lt;br /&gt;
{{SnippetInfo|Show database bloat|version=&amp;gt;=9.3|lang=SQL|depends=contrib/pageinspect|category=Performance}}&lt;br /&gt;
&lt;br /&gt;
The following query uses contrib/pageinspect to summarize the keyspace of a B-Tree quickly. This can be useful to experts that wish to determine exactly how an index may have become unbalanced over time. It visualizes the keyspace of the index.&lt;br /&gt;
&lt;br /&gt;
The query outputs the highkey for every page, starting from the root and working down, in logical/keyspace order.&lt;br /&gt;
&lt;br /&gt;
If the query takes too long to execute, consider uncommenting &amp;quot;/* and level &amp;gt; 0 */&amp;quot; to make it only include internal pages.&lt;br /&gt;
&lt;br /&gt;
See also: [https://pgeoghegan.blogspot.com/2017/07/postgresql-index-bloat-microscope.html &amp;quot;PostgreSQL index bloat under a microscope&amp;quot; blogpost]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;  You are expected to change &amp;quot;pgbench_accounts_pkey&amp;quot; to the name of the index that is to be summarized.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
WITH RECURSIVE index_details AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    &#039;pgbench_accounts_pkey&#039;::text idx&lt;br /&gt;
),&lt;br /&gt;
size_in_pages_index AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    (pg_relation_size(idx::regclass) / (2^13))::int4 size_pages&lt;br /&gt;
  FROM&lt;br /&gt;
    index_details&lt;br /&gt;
),&lt;br /&gt;
page_stats AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    index_details.*,&lt;br /&gt;
    stats.*&lt;br /&gt;
  FROM&lt;br /&gt;
    index_details,&lt;br /&gt;
    size_in_pages_index,&lt;br /&gt;
    lateral (SELECT i FROM generate_series(1, size_pages - 1) i) series,&lt;br /&gt;
    lateral (SELECT * FROM bt_page_stats(idx, i)) stats&lt;br /&gt;
),&lt;br /&gt;
meta_stats AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    *&lt;br /&gt;
  FROM&lt;br /&gt;
    index_details s,&lt;br /&gt;
    lateral (SELECT * FROM bt_metap(s.idx)) meta&lt;br /&gt;
),&lt;br /&gt;
pages_raw AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    *&lt;br /&gt;
  FROM&lt;br /&gt;
    page_stats&lt;br /&gt;
  ORDER BY&lt;br /&gt;
    btpo DESC&lt;br /&gt;
),&lt;br /&gt;
/* XXX: Note ordering dependency within this CTE */&lt;br /&gt;
pages_walk(item, blk, level) AS (&lt;br /&gt;
  SELECT&lt;br /&gt;
    1,&lt;br /&gt;
    blkno,&lt;br /&gt;
    btpo&lt;br /&gt;
  FROM&lt;br /&gt;
    pages_raw&lt;br /&gt;
  WHERE&lt;br /&gt;
    btpo_prev = 0&lt;br /&gt;
    AND btpo = (SELECT level FROM meta_stats)&lt;br /&gt;
  UNION&lt;br /&gt;
  SELECT&lt;br /&gt;
    CASE WHEN level = btpo THEN w.item + 1 ELSE 1 END,&lt;br /&gt;
    blkno,&lt;br /&gt;
    btpo&lt;br /&gt;
  FROM&lt;br /&gt;
    pages_raw i,&lt;br /&gt;
    pages_walk w&lt;br /&gt;
  WHERE&lt;br /&gt;
    i.btpo_prev = w.blk OR (btpo_prev = 0 AND btpo = w.level - 1)&lt;br /&gt;
)&lt;br /&gt;
SELECT&lt;br /&gt;
  /* Uncomment if these details interesting */&lt;br /&gt;
  /*&lt;br /&gt;
  idx,&lt;br /&gt;
  btpo_prev,&lt;br /&gt;
  btpo_next,&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * &amp;quot;level&amp;quot; is level of tree -- 0 is leaf.  First tuple returned is root.&lt;br /&gt;
   */&lt;br /&gt;
  btpo AS level,&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * Ordinal number of item on this level&lt;br /&gt;
   */&lt;br /&gt;
  item AS l_item,&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * Block number, and details of page&lt;br /&gt;
   */&lt;br /&gt;
  blkno,&lt;br /&gt;
  btpo_flags,&lt;br /&gt;
  TYPE,&lt;br /&gt;
  live_items,&lt;br /&gt;
  dead_items,&lt;br /&gt;
  avg_item_size,&lt;br /&gt;
  page_size,&lt;br /&gt;
  free_size,&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * distinct_real_item_keys is how many distinct &amp;quot;data&amp;quot; fields on page&lt;br /&gt;
   * (excludes highkey).&lt;br /&gt;
   *&lt;br /&gt;
   * If this is less than distinct_block_pointers on an internal page, that&lt;br /&gt;
   * means that there are so many duplicates in its children that there are&lt;br /&gt;
   * duplicate high keys in children, so the index is probably pretty bloated.&lt;br /&gt;
   *&lt;br /&gt;
   * Even unique indexes can have duplicates.  It&#039;s sometimes interesting to&lt;br /&gt;
   * watch out for how many distinct real items there are within leaf pages,&lt;br /&gt;
   * compared to the number of live items, or total number of items.  Ideally,&lt;br /&gt;
   * these will all be exactly the same for unique indexes.&lt;br /&gt;
   */&lt;br /&gt;
  distinct_real_item_keys,&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * Per pageinspect docs, first item on non-rightmost page on level is &amp;quot;high&lt;br /&gt;
   * key&amp;quot; item, which represents an upper bound on items on the page.&lt;br /&gt;
   * (Rightmost pages are sometimes considered to have a conceptual &amp;quot;positive&lt;br /&gt;
   * infinity&amp;quot; item, and are shown to have a high key that&#039;s NULL by this query)&lt;br /&gt;
   *&lt;br /&gt;
   * This can be used to visualize how finely or coarsely separated the&lt;br /&gt;
   * keyspace is.&lt;br /&gt;
   *&lt;br /&gt;
   * Note that below int4_from_page_data() function could produce more useful&lt;br /&gt;
   * visualization of split points.&lt;br /&gt;
   */&lt;br /&gt;
  CASE WHEN btpo_next != 0 THEN first_item END AS highkey,&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
   * distinct_block_pointers is table blocks that are pointed to by items on&lt;br /&gt;
   * the page (not including high key, which doesn&#039;t point anywhere).&lt;br /&gt;
   *&lt;br /&gt;
   * This is interesting on leaf pages, because it indicates how fragmented the&lt;br /&gt;
   * index is with respect to table accesses, which is important for range&lt;br /&gt;
   * queries.&lt;br /&gt;
   *&lt;br /&gt;
   * This should be redundant on internal levels, because all downlinks in internal&lt;br /&gt;
   * pages point to distinct blocks in level below.&lt;br /&gt;
   */&lt;br /&gt;
  distinct_block_pointers&lt;br /&gt;
&lt;br /&gt;
FROM&lt;br /&gt;
  pages_walk w,&lt;br /&gt;
  pages_raw i,&lt;br /&gt;
  lateral (&lt;br /&gt;
    SELECT&lt;br /&gt;
    count(distinct (case when btpo_next = 0 or itemoffset &amp;gt; 1 then (data collate &amp;quot;C&amp;quot;) end)) as distinct_real_item_keys,&lt;br /&gt;
    count(distinct (case when btpo_next = 0 or itemoffset &amp;gt; 1 then (ctid::text::point)[0]::bigint end)) as distinct_block_pointers,&lt;br /&gt;
    (array_agg(data))[1] as first_item&lt;br /&gt;
    FROM bt_page_items(idx, blkno)&lt;br /&gt;
  ) items&lt;br /&gt;
  where w.blk = i.blkno&lt;br /&gt;
  /* Uncomment to avoid showing leaf level (faster): */&lt;br /&gt;
  /* and level &amp;gt; 0*/&lt;br /&gt;
ORDER BY btpo DESC, item;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpreting bt_page_items() &amp;quot;data&amp;quot; field as a little-endian int4 attribute ===&lt;br /&gt;
&lt;br /&gt;
{{SnippetInfo|Show database bloat|version=&amp;gt;=9.2|lang=SQL|depends=contrib/pageinspect|category=Performance}}&lt;br /&gt;
&lt;br /&gt;
The following convenience functions can be used to display the &amp;quot;data&amp;quot; field in bt_page_items() as their native type, at least for indexes whose pg_attribute entries consist of a single int4/integer attribute. This includes SERIAL primary key indexes. It can be used to make the above &amp;quot;Summarize keyspace of a B-Tree index&amp;quot; query display the keyspace split points using native type representation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;  The byteswap is only necessary on little-endian (Intel) CPUs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- Sources:&lt;br /&gt;
--&lt;br /&gt;
-- https://stackoverflow.com/questions/17208945/whats-the-easiest-way-to-represent-a-bytea-as-a-single-integer-in-postgresql&lt;br /&gt;
-- https://stackoverflow.com/questions/11142235/convert-bigint-to-bytea-but-swap-the-byte-order&lt;br /&gt;
--&lt;br /&gt;
create or replace function reverse_bytes_iter(bytes bytea, length int, midpoint int, index int)&lt;br /&gt;
returns bytea as&lt;br /&gt;
$$&lt;br /&gt;
  select case when index &amp;gt;= midpoint then bytes else&lt;br /&gt;
    reverse_bytes_iter(&lt;br /&gt;
      set_byte(&lt;br /&gt;
        set_byte(bytes, index, get_byte(bytes, length-index)),&lt;br /&gt;
        length-index, get_byte(bytes, index)&lt;br /&gt;
      ),&lt;br /&gt;
      length, midpoint, index + 1&lt;br /&gt;
    )&lt;br /&gt;
  end;&lt;br /&gt;
$$ language sql immutable strict;&lt;br /&gt;
&lt;br /&gt;
create or replace function reverse_bytes(bytes bytea) returns bytea as&lt;br /&gt;
$$&lt;br /&gt;
select reverse_bytes_iter(bytes, octet_length(bytes)-1, octet_length(bytes)/2, 0)&lt;br /&gt;
$$&lt;br /&gt;
language sql immutable strict;&lt;br /&gt;
&lt;br /&gt;
create or replace function int4_from_bytea(bytea) returns int4&lt;br /&gt;
as $$&lt;br /&gt;
select (&#039;x&#039; || right($1::text, 6))::bit(24)::int;&lt;br /&gt;
$$&lt;br /&gt;
language sql immutable strict;&lt;br /&gt;
&lt;br /&gt;
create or replace function int4_from_page_data(text) returns int4&lt;br /&gt;
as $$&lt;br /&gt;
select int4_from_bytea(reverse_bytes(decode($1, &#039;hex&#039;)));&lt;br /&gt;
$$&lt;br /&gt;
language sql immutable strict;&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Use:&lt;br /&gt;
--&lt;br /&gt;
--  postgres=# select *, int4_from_page_data(data) from bt_page_items(&#039;f&#039;, 1) limit 15;&lt;br /&gt;
--   itemoffset │    ctid    │ itemlen │ nulls │ vars │          data           │ int4_from_page_data&lt;br /&gt;
--  ────────────┼────────────┼─────────┼───────┼──────┼─────────────────────────┼─────────────────────&lt;br /&gt;
--            1 │ (17698,69) │      16 │ f     │ f    │ 5c 00 00 00 00 00 00 00 │                  92&lt;br /&gt;
--            2 │ (0,1)      │      16 │ f     │ f    │ 01 00 00 00 00 00 00 00 │                   1&lt;br /&gt;
--            3 │ (8849,126) │      16 │ f     │ f    │ 01 00 00 00 00 00 00 00 │                   1&lt;br /&gt;
--            4 │ (17699,25) │      16 │ f     │ f    │ 01 00 00 00 00 00 00 00 │                   1&lt;br /&gt;
--            5 │ (17699,26) │      16 │ f     │ f    │ 01 00 00 00 00 00 00 00 │                   1&lt;br /&gt;
--            6 │ (0,2)      │      16 │ f     │ f    │ 02 00 00 00 00 00 00 00 │                   2&lt;br /&gt;
--            7 │ (8849,125) │      16 │ f     │ f    │ 02 00 00 00 00 00 00 00 │                   2&lt;br /&gt;
--            8 │ (17699,23) │      16 │ f     │ f    │ 02 00 00 00 00 00 00 00 │                   2&lt;br /&gt;
--            9 │ (17699,24) │      16 │ f     │ f    │ 02 00 00 00 00 00 00 00 │                   2&lt;br /&gt;
--           10 │ (0,3)      │      16 │ f     │ f    │ 03 00 00 00 00 00 00 00 │                   3&lt;br /&gt;
--           11 │ (8849,124) │      16 │ f     │ f    │ 03 00 00 00 00 00 00 00 │                   3&lt;br /&gt;
--           12 │ (17699,21) │      16 │ f     │ f    │ 03 00 00 00 00 00 00 00 │                   3&lt;br /&gt;
--           13 │ (17699,22) │      16 │ f     │ f    │ 03 00 00 00 00 00 00 00 │                   3&lt;br /&gt;
--           14 │ (0,4)      │      16 │ f     │ f    │ 04 00 00 00 00 00 00 00 │                   4&lt;br /&gt;
--           15 │ (8849,123) │      16 │ f     │ f    │ 04 00 00 00 00 00 00 00 │                   4&lt;br /&gt;
--  (15 rows)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unused Indexes ==&lt;br /&gt;
&lt;br /&gt;
Since indexes add significant overhead to any table change operation, they should be removed if they are not being used for either queries or constraint enforcement (such as making sure a value is unique).  How to find such indexes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.xzilla.net/blog/2008/Jul/Index-pruning-techniques.html Index pruning techniques]&lt;br /&gt;
* [http://hype-free.blogspot.com/2008/09/finding-unused-indexes-in-postgresql.html Finding unused indexes]&lt;br /&gt;
* [http://it.toolbox.com/blogs/database-soup/finding-useless-indexes-28796 Finding useless indexes]&lt;br /&gt;
* [http://jmorano.moretrix.com/2014/02/postgresql-monitor-unused-indexes/ &#039;Monitor unused indexes&#039; by Johnny Morano]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Index statistics queries from [http://www.baconandtech.com/2009/06/06/book-review-part-i-refactoring-sql-applications-with-bonus-queries/ &amp;quot;Refactoring SQL Applications&amp;quot; review]&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]][[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Change_management_tools_and_techniques&amp;diff=32974</id>
		<title>Change management tools and techniques</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Change_management_tools_and_techniques&amp;diff=32974"/>
		<updated>2019-01-15T21:32:08Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Schema management tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes various tools and methodologies for conducting database changes and deploying them. It includes tools to manage schema changes (via patches, or by adding complete SQL files), sproc changes and data migrations.&lt;br /&gt;
&lt;br /&gt;
== Schema management tools ==&lt;br /&gt;
* [https://gitlab.com/depesz/Versioning Versioning ] by Hubert &amp;quot;depesz&amp;quot; Lubaczewski [http://www.depesz.com/2010/08/22/versioning/ blog post]&lt;br /&gt;
* [https://github.com/theory/sqitch Sqitch] by David Wheeler [http://sqitch.org official website]&lt;br /&gt;
* [https://github.com/gilt/schema-evolution-manager Schema evolution manager (sem) ] by Gilt Groupe [https://speakerdeck.com/mbryzek/schema-evolutions-at-gilt-groupe PGDay NYC 2013 presentation]&lt;br /&gt;
* [https://github.com/perseas/Pyrseas Pyrseas] &lt;br /&gt;
* [https://dbsteward.io/ DBSteward]&lt;br /&gt;
* [https://github.com/yandex/pgmigrate PGmigrate]&lt;br /&gt;
* [https://github.com/djrobstep/migra migra: like diff but for PostgreSQL schemas] by djrobstep [https://migra.djrobstep.com docs]&lt;br /&gt;
&lt;br /&gt;
== Functions deployment ==&lt;br /&gt;
* [https://github.com/trustly/fdiff fdiff] by Joel Jacobson [http://joelonsql.com/2013/04/24/secure-deployment-of-postgresql-functions/ blog post]&lt;br /&gt;
* [http://tech.valgog.com/2012/01/schema-based-versioning-and-deployment.html Schema-based API versioning] by Valentine Gogichashvili&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
* [https://docs.google.com/presentation/d/1TV0bExFwVy-_d6C7A8Z2JL9Z9tvtkuZv3D58fkC3GWQ/edit?usp=sharing ALTER DATABASE ADD SANITY] by Alexey Klyukin&lt;br /&gt;
* [https://migra.djrobstep.com/your-migrations-are-bad-by-djrobstep-postgresopen2017.pdf Your database migrations are bad and you should feel bad] by djrobstep&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=IRC2RWNames&amp;diff=32957</id>
		<title>IRC2RWNames</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=IRC2RWNames&amp;diff=32957"/>
		<updated>2019-01-10T01:34:09Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* List of IRC nicks with their respective real world names */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== List of IRC nicks with their respective real world names ===&lt;br /&gt;
&lt;br /&gt;
You can find many PostgreSQL users and developers chatting in [irc://irc.freenode.net/postgresql #postgresql on freenode].  Here&#039;s more information about some of the regulars there.  &#039;&#039;&#039;Note:&#039;&#039;&#039; people are on the list below only when they want to be.  Do not (re-)add anyone without their express permission.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Nickname || Real Name&lt;br /&gt;
|-&lt;br /&gt;
|ads || Andreas Scherbaum&lt;br /&gt;
|-&lt;br /&gt;
|agliodbs, aglio2 (freenode), jberkus (oftc) || Josh Berkus&lt;br /&gt;
|-&lt;br /&gt;
|ahammond || Andrew Hammond&lt;br /&gt;
|-&lt;br /&gt;
|akretschmer || Andreas Kretschmer&lt;br /&gt;
|-&lt;br /&gt;
|alvherre || Alvaro Herrera&lt;br /&gt;
|-&lt;br /&gt;
|andres || Andres Freund&lt;br /&gt;
|-&lt;br /&gt;
|Assid || Satish Alwani&lt;br /&gt;
|-&lt;br /&gt;
|aurynn || Aurynn Shaw&lt;br /&gt;
|-&lt;br /&gt;
|beaud76 || Philippe Beaudoin&lt;br /&gt;
|-&lt;br /&gt;
|BlueAidan/BlueAidan_work || [[user:davidblewett | David Blewett]]&lt;br /&gt;
|-&lt;br /&gt;
|bmomjian || Bruce Momjian&lt;br /&gt;
|-&lt;br /&gt;
|cbbrowne || Christopher Browne&lt;br /&gt;
|-&lt;br /&gt;
|cce || Clark C. Evans&lt;br /&gt;
|-&lt;br /&gt;
|cclavadetscher || Charles Clavadetscher&lt;br /&gt;
|-&lt;br /&gt;
|chicagoben || Benjamin Johnson&lt;br /&gt;
|-&lt;br /&gt;
|crab || Abhijit Menon-Sen&lt;br /&gt;
|-&lt;br /&gt;
|Crad || Gavin M. Roy&lt;br /&gt;
|-&lt;br /&gt;
|daamien ||  Damien Clochard&lt;br /&gt;
|-&lt;br /&gt;
|DarcyB || Darcy Buskermolen&lt;br /&gt;
|-&lt;br /&gt;
|darkixion || Thom Brown&lt;br /&gt;
|-&lt;br /&gt;
|davidfetter || David Fetter&lt;br /&gt;
|-&lt;br /&gt;
|dbb || Brian M Hamlin  / darkblue_b&lt;br /&gt;
|-&lt;br /&gt;
|dcolish || [http://www.unencrypted.org Dan Colish]&lt;br /&gt;
|-&lt;br /&gt;
|dcramer || Dave Cramer&lt;br /&gt;
|-&lt;br /&gt;
|DeciBull, TheCougar || Jim C. Nasby&lt;br /&gt;
|-&lt;br /&gt;
|dennisb || Dennis Bj&amp;amp;ouml;rklund&lt;br /&gt;
|-&lt;br /&gt;
|depesz || Hubert Lubaczewski&lt;br /&gt;
|-&lt;br /&gt;
|devrimgunduz || Devrim G&amp;amp;uuml;nd&amp;amp;uuml;z&lt;br /&gt;
|-&lt;br /&gt;
|digicon || [http://digicondev.blogspot.com Zach Conrad]&lt;br /&gt;
|-&lt;br /&gt;
|digitalknight || Atri Sharma&lt;br /&gt;
|-&lt;br /&gt;
|dim || [http://tapoueh.org Dimitri Fontaine]&lt;br /&gt;
|-&lt;br /&gt;
|direvus || Brendan Jurd&lt;br /&gt;
|-&lt;br /&gt;
|drbair || Ryan Bair&lt;br /&gt;
|-&lt;br /&gt;
|DrLou || Lou Picciano&lt;br /&gt;
|-&lt;br /&gt;
|duck_tape || Adi Alurkar&lt;br /&gt;
|-&lt;br /&gt;
|dvl || [http://langille.org/ Dan Langille]&lt;br /&gt;
|-&lt;br /&gt;
|eggyknap || Joshua Tolley&lt;br /&gt;
|-&lt;br /&gt;
|endpoint_david || David Christensen&lt;br /&gt;
|-&lt;br /&gt;
|eulerto || Euler Taveira&lt;br /&gt;
|-&lt;br /&gt;
|f3ew/devdas || Devdas Vasu Bhagat&lt;br /&gt;
|-&lt;br /&gt;
|feivel || Michael Meskes&lt;br /&gt;
|-&lt;br /&gt;
|frost242 || Thomas Reiss&lt;br /&gt;
|-&lt;br /&gt;
|elein || Elein Mustain&lt;br /&gt;
|-&lt;br /&gt;
|Gibheer || Stefan Radomski&lt;br /&gt;
|-&lt;br /&gt;
|gleu || Guillaume Lelarge&lt;br /&gt;
|-&lt;br /&gt;
|gorthx || [[User:Gabrielle|Gabrielle Roth]]&lt;br /&gt;
|-&lt;br /&gt;
|grzm || Michael Glaesemann&lt;br /&gt;
|-&lt;br /&gt;
|gsmet || Guillaume Smet&lt;br /&gt;
|-&lt;br /&gt;
|gregs1104 || Greg Smith&lt;br /&gt;
|-&lt;br /&gt;
|gurjeet || [[User:singh.gurjeet|Gurjeet Singh]]&lt;br /&gt;
|-&lt;br /&gt;
|G_SabinoMullane || Greg Sabino Mullane&lt;br /&gt;
|-&lt;br /&gt;
|HarrisonF || Harrison Fisk&lt;br /&gt;
|-&lt;br /&gt;
|ioguix || Jehan-Guillaume de Rorthais&lt;br /&gt;
|-&lt;br /&gt;
|indigo || Phil Frost&lt;br /&gt;
|-&lt;br /&gt;
|intgr || Marti Raudsepp&lt;br /&gt;
|-&lt;br /&gt;
|iwantchips || [https://payalsingh.me Payal Singh]&lt;br /&gt;
|-&lt;br /&gt;
|JanniCash || Jan Wieck&lt;br /&gt;
|-&lt;br /&gt;
|jconway || Joe Conway&lt;br /&gt;
|-&lt;br /&gt;
|jdavis, jdavis_ || Jeff Davis&lt;br /&gt;
|-&lt;br /&gt;
|jkatz05 || Jonathan S. Katz&lt;br /&gt;
|-&lt;br /&gt;
|johto || Marko Tiikkaja&lt;br /&gt;
|-&lt;br /&gt;
|jurka || Kris Jurka&lt;br /&gt;
|-&lt;br /&gt;
|justatheory || David Wheeler&lt;br /&gt;
|-&lt;br /&gt;
|jpa || Jean-Paul Argudo&lt;br /&gt;
|-&lt;br /&gt;
|jwp || James Pye&lt;br /&gt;
|-&lt;br /&gt;
|j_williams || Josh Williams&lt;br /&gt;
|-&lt;br /&gt;
|kandreas || Andreas Karlson&lt;br /&gt;
|-&lt;br /&gt;
|keithf4 || [http://www.keithf4.com Keith Fiske]&lt;br /&gt;
|-&lt;br /&gt;
|kgrittn || Kevin Grittner&lt;br /&gt;
|-&lt;br /&gt;
|klando || [[User:c2main|Cédric Villemain]]&lt;br /&gt;
|-&lt;br /&gt;
|larryrtx || Larry Rosenman&lt;br /&gt;
|-&lt;br /&gt;
|linuxpoet, postgresman || Joshua D. Drake&lt;br /&gt;
|-&lt;br /&gt;
|lluad || Steve Atkins&lt;br /&gt;
|-&lt;br /&gt;
|lsmith || Lukas Smith&lt;br /&gt;
|-&lt;br /&gt;
|macdice || Thomas Munro&lt;br /&gt;
|-&lt;br /&gt;
|mage_ || Julien Cigar&lt;br /&gt;
|-&lt;br /&gt;
|magnush || Magnus Hagander&lt;br /&gt;
|-&lt;br /&gt;
|maiku41 || Mike Blackwell&lt;br /&gt;
|-&lt;br /&gt;
|marco44 || Marc Cousin&lt;br /&gt;
|-&lt;br /&gt;
|markwkm || Mark Wong&lt;br /&gt;
|-&lt;br /&gt;
|mastermind || [[user:mastermind | Stefan Kaltenbrunner]]&lt;br /&gt;
|-&lt;br /&gt;
|mbalmer || [[user:mbalmer | Marc Balmer]]&lt;br /&gt;
|-&lt;br /&gt;
|merlin83 || Chua Khee Chin&lt;br /&gt;
|-&lt;br /&gt;
|merlinm || Merlin Moncure&lt;br /&gt;
|-&lt;br /&gt;
|metatrontech || Chris Travers&lt;br /&gt;
|-&lt;br /&gt;
|miracee || Susanne Ebrecht&lt;br /&gt;
|-&lt;br /&gt;
|Moosbert || Peter Eisentraut&lt;br /&gt;
|-&lt;br /&gt;
|Myon || [[user:Myon | Christoph Berg]]&lt;br /&gt;
|-&lt;br /&gt;
|neilc || Neil Conway&lt;br /&gt;
|-&lt;br /&gt;
|oicu || Andrew Dunstan&lt;br /&gt;
|-&lt;br /&gt;
|okbobcz || Pavel Stehule&lt;br /&gt;
|-&lt;br /&gt;
|patryk || Patryk Kordylewski&lt;br /&gt;
|-&lt;br /&gt;
|pasha_golub || [http://pgolub.wordpress.com/ Pavel Golub]&lt;br /&gt;
|-&lt;br /&gt;
|pg_docbot || [[IRCBotSyntax]]&lt;br /&gt;
|-&lt;br /&gt;
|pgSnake || Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|PJMODOS || Petr Jel&amp;amp;iacute;nek&lt;br /&gt;
|-&lt;br /&gt;
|Possible || Robert Ivens&lt;br /&gt;
|-&lt;br /&gt;
|postwait || Theo Schlossnagle&lt;br /&gt;
|-&lt;br /&gt;
|prothid || R Brenton Strickler&lt;br /&gt;
|-&lt;br /&gt;
|psoo || Bernd Helmle&lt;br /&gt;
|-&lt;br /&gt;
|PSUdaemon || Phil Sorber&lt;br /&gt;
|-&lt;br /&gt;
|pyarra || Philip Yarra&lt;br /&gt;
|-&lt;br /&gt;
|raptelan || [[user:Cshobe|Casey Allen Shobe]]&lt;br /&gt;
|-&lt;br /&gt;
|RhodiumToad (formerly AndrewSN) || Andrew Gierth&lt;br /&gt;
|-&lt;br /&gt;
|rjuju || Julien Rouhaud&lt;br /&gt;
|-&lt;br /&gt;
|Robe || [[user:Robe | Michael Renner]]&lt;br /&gt;
|-&lt;br /&gt;
|rotellaro || Federico Campoli&lt;br /&gt;
|-&lt;br /&gt;
|russ960 || [[user:russ960|Russ Johnson]]&lt;br /&gt;
|-&lt;br /&gt;
|rz || Kirill Simonov&lt;br /&gt;
|-&lt;br /&gt;
|saper || Marcin Cieślak&lt;br /&gt;
|-&lt;br /&gt;
|SAS || Stéphane Schildknecht&lt;br /&gt;
|-&lt;br /&gt;
|schmiddy || Josh Kupershmidt&lt;br /&gt;
|-&lt;br /&gt;
|scrappy || Marc G. Fournier&lt;br /&gt;
|-&lt;br /&gt;
|sehrope || Sehrope Sarkuni&lt;br /&gt;
|-&lt;br /&gt;
|selenamarie || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
|SkippyDigits || Sherri Kalm&lt;br /&gt;
|-&lt;br /&gt;
|Snow-Man || Stephen Frost&lt;br /&gt;
|-&lt;br /&gt;
|Spritz || Matteo Beccati&lt;br /&gt;
|-&lt;br /&gt;
|sternocera || Peter Geoghegan&lt;br /&gt;
|-&lt;br /&gt;
|StuckMojo, MojoWork || Jon Erdman&lt;br /&gt;
|-&lt;br /&gt;
|swm || Gavin Sherry&lt;br /&gt;
|-&lt;br /&gt;
|vy || Volkan YAZICI&lt;br /&gt;
|-&lt;br /&gt;
|wulczer || Jan Urbański&lt;br /&gt;
|-&lt;br /&gt;
|xaprb || Baron Schwartz&lt;br /&gt;
|-&lt;br /&gt;
|xocolatl, ififbetween || Vik Fearing&lt;br /&gt;
|-&lt;br /&gt;
|xzilla, xzi11a || [[User:Xzilla|Robert Treat]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Apt/FAQ&amp;diff=32480</id>
		<title>Apt/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Apt/FAQ&amp;diff=32480"/>
		<updated>2018-09-07T22:47:40Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Development snapshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==apt.postgresql.org FAQ==&lt;br /&gt;
&lt;br /&gt;
==General Questions==&lt;br /&gt;
&lt;br /&gt;
===What&#039;s the difference between the PostgreSQL packages provided by Debian/Ubuntu and by the PGDG apt repository?===&lt;br /&gt;
&lt;br /&gt;
Pretty little, actually. The PGDG packages are built from the same source as the Debian packages (Ubuntu is using the same source for the PostgreSQL server packages as well).&lt;br /&gt;
We try to follow Debian unstable&#039;s versions as close as possible, i.e. the packages available here are the same, just rebuilt with a &amp;quot;.pgdg&amp;quot; appended to the version number.&lt;br /&gt;
We are also using the same postgresql-common infrastructure packages.&lt;br /&gt;
&lt;br /&gt;
===Should I use Debian/Ubuntu&#039;s packages, or the PGDG packages?===&lt;br /&gt;
&lt;br /&gt;
Debian and Ubuntu only ship one PostgreSQL server version per release. For example, there is only PostgreSQL 8.4 in Debian Squeeze/6.0. If that is the version you want, use it. There is no real difference.&lt;br /&gt;
If you want a different PostgreSQL server version, use the PGDG packages.&lt;br /&gt;
&lt;br /&gt;
Same goes for extension module packages, except that we are updating to new upstream versions earlier (following Debian unstable), while Debian/Ubuntu will only accept patches for critical problems in a released distribution.&lt;br /&gt;
&lt;br /&gt;
===What about Debian backports?===&lt;br /&gt;
&lt;br /&gt;
[[http://backports.debian.org Debian backports]] provide newer package versions for released distributions, similar to what the PGDG apt repository does.&lt;br /&gt;
The scope of the backports archive is strictly limited to testing -&amp;gt; stable, and stable -&amp;gt; oldstable backports, though.&lt;br /&gt;
The PGDG apt repository provides a broader range of available packages, and Debian version/PostgreSQL version combinations than what would be possible to provide on backports.&lt;br /&gt;
&lt;br /&gt;
Similar to the previous FAQ question, if the package you want is available on backports, there is nothing wrong with using it.&lt;br /&gt;
&lt;br /&gt;
===Are these packages ready for production?===&lt;br /&gt;
&lt;br /&gt;
As said above, these packages are identical to what Debian/Ubuntu are releasing. So yes, these packages are recommended for production use.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s pgapt.debian.net?===&lt;br /&gt;
&lt;br /&gt;
pgapt.debian.net was the old location of this repository, which was shut down in January 2013.&lt;br /&gt;
&lt;br /&gt;
==Technical Questions==&lt;br /&gt;
&lt;br /&gt;
===How do I dist-upgrade?===&lt;br /&gt;
&lt;br /&gt;
Just update your sources.list entries, and use your favorite package tool.&lt;br /&gt;
&lt;br /&gt;
When compiling packages for several distributions, we append different suffixes to the package version numbers to make sure, upgrades work. Debian Squeeze packages have &amp;quot;.pgdg60+1&amp;quot; appended, Wheezy packages &amp;quot;.pgdg70+1&amp;quot; and so on; likewise &amp;quot;.pgdg12.4+1&amp;quot; for Ubuntu Precise. (Sid packages have &amp;quot;.pgdg+1&amp;quot;, which sorts after all the others in Debian&#039;s version number scheme.) This makes sure packages from the old distribution you used will be properly replaced by packages from the new distribution when you do a dist-upgrade.&lt;br /&gt;
&lt;br /&gt;
===Where is the &amp;quot;stable&amp;quot; distribution?===&lt;br /&gt;
&lt;br /&gt;
We prefer to only use codenames (squeeze, precise, ...) for distribution names. We run a different repository from Debian, so we would never be able to update the stable/oldstable/testing symlinks at the very same time when a new Debian release comes out, and there would be a time window where users would be seeing an inconsistencies. (Also, it is usually better to use codenames in sources.list even for Debian distributions, because then the user decides when it is time for upgrade.)&lt;br /&gt;
&lt;br /&gt;
===I am using a non-LTS release of Ubuntu===&lt;br /&gt;
&lt;br /&gt;
Non-LTS releases of Ubuntu are only added to the repository if the packages from the latest LTS release are incompatible with the release in question.&lt;br /&gt;
Using the latest LTS release instead generally works, unless library dependencies cannot be fulfilled, in which case we will provide updated packages for the non-LTS release.&lt;br /&gt;
&lt;br /&gt;
===I want only specific packages from this repository===&lt;br /&gt;
&lt;br /&gt;
Per default, the PGDG repository will have the same &amp;quot;pinning&amp;quot; priority as your Debian/Ubuntu repositories. This means your existing PostgreSQL packages will be replaced with versions from this repository, because they have greater version numbers. If you do not want this, you need to configure pinning (see apt_preferences(5) for details).&lt;br /&gt;
&lt;br /&gt;
Create the file &#039;&#039;&#039;/etc/apt/preferences.d/pgdg.pref&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 Package: *&lt;br /&gt;
 Pin: release o=apt.postgresql.org&lt;br /&gt;
 Pin-Priority: 200&lt;br /&gt;
&lt;br /&gt;
The default priority for repositories is 500, so 200 will lower the PGDG repository priority enough such you don&#039;t get packages automatically installed from there, but once you have packages installed, they will keep getting upgraded to newer versions from the PGDG repository.&lt;br /&gt;
&lt;br /&gt;
You can check your setup using the &#039;&#039;&#039;apt-cache policy&#039;&#039;&#039; command to see if &amp;quot;200&amp;quot; shows up in the output:&lt;br /&gt;
&lt;br /&gt;
 $ apt-cache policy postgresql-9.1&lt;br /&gt;
 postgresql-9.1:&lt;br /&gt;
   Installed: 9.1.8-1.pgdg70+1&lt;br /&gt;
   Candidate: 9.1.8-1.pgdg70+1&lt;br /&gt;
   Version table:&lt;br /&gt;
  *** 9.1.8-1.pgdg70+1 0&lt;br /&gt;
         &#039;&#039;&#039;200&#039;&#039;&#039; &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; wheezy-pgdg/main amd64 Packages&lt;br /&gt;
         100 /var/lib/dpkg/status&lt;br /&gt;
      9.1.8-1 0&lt;br /&gt;
         500 &amp;lt;nowiki&amp;gt;http://ftp.debian.org/debian/&amp;lt;/nowiki&amp;gt; wheezy/main amd64 Packages&lt;br /&gt;
&lt;br /&gt;
===I want libpq5 for version X, but there is only version Y in the repository===&lt;br /&gt;
&lt;br /&gt;
libpq5 is compatible with older versions, so there is usually little reason to use a specific version. (psql requires at least the version corresponding to its own version, most other software does not really care.) For that reason, we ship the libpq5 package built from the latest stable PostgreSQL server version in the &#039;&#039;main&#039;&#039; archive component.&lt;br /&gt;
&lt;br /&gt;
If you really want to use a different version, the packages are available in separate archive components named after the PostgreSQL major version. Append that version after &amp;quot;main&amp;quot; in your sources.list. For example, if you wanted 9.0&#039;s libpq5 on Debian Squeeze, use this:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; squeeze-pgdg main &#039;&#039;&#039;9.0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that the other libpq5 package will still be visible in the &amp;quot;main&amp;quot; component, so you will need to configure pinning or set that package on hold to prevent apt from trying to upgrade to the newer version.&lt;br /&gt;
&lt;br /&gt;
===I want to try the beta version of the next PostgreSQL release===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING&#039;&#039;&#039;: The data format may change between beta releases. Be prepared to &#039;&#039;pg_dump&#039;&#039; the database contents before you upgrade the package to a newer beta or to a final release. Check the release notes before upgrading.&lt;br /&gt;
&lt;br /&gt;
We ship packages for beta and RC releases, but like in the previous FAQ entry, you need to add the &#039;&#039;&#039;11&#039;&#039;&#039; component to your &amp;lt;code&amp;gt;/etc/apt/sources.list.d/pgdg.list&amp;lt;/code&amp;gt; entry, so the version 11 packages will be available for installation:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; stretch-pgdg main &#039;&#039;&#039;11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Development snapshots===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING&#039;&#039;&#039;: Development snapshots are meant for testing purposes only, and the catalog version will change frequently. Don&#039;t store any data you cannot afford to lose.&lt;br /&gt;
&lt;br /&gt;
Development snapshots of &#039;&#039;&#039;postgresql-11&#039;&#039;&#039; are being built every 6 hours, directly from git. The packages are available for &#039;&#039;&#039;amd64 only&#039;&#039;&#039;, for the following distributions:&lt;br /&gt;
&#039;&#039;&#039;sid-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;stretch-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;jessie-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;xenial-pgdg-testing&#039;&#039;&#039;, and &#039;&#039;&#039;trusty-pgdg-testing&#039;&#039;&#039;. You need to add a sources.list entry including the &#039;&#039;&#039;11&#039;&#039;&#039; component, e.g. for xenial:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; &#039;&#039;&#039;xenial-pgdg-testing&#039;&#039;&#039; main &#039;&#039;&#039;11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, slightly more generally:&lt;br /&gt;
&lt;br /&gt;
  sudo add-apt-repository &amp;quot;deb &amp;lt;nowiki&amp;gt;https://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; $(lsb_release -s -c)-pgdg-testing main 11&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===After updating from an alpha or beta release I get an error about CATALOG_VERSION===&lt;br /&gt;
&lt;br /&gt;
After upgrading from an alpha or beta package, I get an error like:&lt;br /&gt;
&lt;br /&gt;
 The database cluster was initialized with CATALOG_VERSION_NO X, but the server was compiled with CATALOG_VERSION_NO Y.&lt;br /&gt;
&lt;br /&gt;
This is because the PostgreSQL data format can change between alpha releases - and occasionally even between beta releases if there&#039;s a really pressing need.&lt;br /&gt;
&lt;br /&gt;
If you need to access the old data, you will need to use the package version you were running before, and use &#039;&#039;pg_dump&#039;&#039; or &#039;&#039;pg_upgrade&#039;&#039;.&lt;br /&gt;
The necessary binaries should have been saved in /var/tmp/postgresql*.&lt;br /&gt;
Alternatively, look for the old packages in your &#039;&#039;/var/cache/apt/archives&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===What are the testing distributions?===&lt;br /&gt;
&lt;br /&gt;
We have distributions squeeze-pgdg-testing, precise-pgdg-testing, sid-pgdg-testing, ... which receive all updates before they are promoted to the &amp;quot;live&amp;quot; distributions. These are not meant for production use, but you are welcome to use them and help debugging and testing the packages. Please join the mailing list or the IRC channel. The distributions have a lower apt priority by default, you will have to set up pinning (e.g. with priority 500) if you want them to be used automatically.&lt;br /&gt;
&lt;br /&gt;
===Can I mirror the repository?===&lt;br /&gt;
&lt;br /&gt;
For a full mirror of some or all distributions, we suggest to use &#039;&#039;debmirror&#039;&#039;. For mirroring just a subset of packages, &#039;&#039;reprepro&#039;&#039; offers the ability to &amp;quot;pull&amp;quot; packages from remote repositories.&lt;br /&gt;
&lt;br /&gt;
===Where are older versions of the packages?===&lt;br /&gt;
&lt;br /&gt;
The *-pgdg distributions only contain the most recent version of each package. Older versions are available in the morgue at&lt;br /&gt;
http://atalia.postgresql.org/morgue/.&lt;br /&gt;
&lt;br /&gt;
(There is no dists/ structure, and the provided Packages.xz and Sources.xz files contain all packages for all distributions, users will need to choose the correct files manually.)&lt;br /&gt;
&lt;br /&gt;
===GPG error: invalid signatures===&lt;br /&gt;
&lt;br /&gt;
If you are getting errors from &#039;&#039;apt-get update&#039;&#039; like:&lt;br /&gt;
&lt;br /&gt;
 W: A error occurred during the signature verification. The repository is not&lt;br /&gt;
 updated and the previous index files will be used. GPG error:&lt;br /&gt;
 http://apt.postgresql.org squeeze-pgdg Release: The following signatures were invalid: KEYEXPIRED 1381654177&lt;br /&gt;
&lt;br /&gt;
... you have an outdated copy of the repository key. In most cases &#039;&#039;&#039;rm /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg&#039;&#039;&#039; will fix it by removing the &#039;&#039;second&#039;&#039; copy of the key.&lt;br /&gt;
Use &#039;&#039;&#039;apt-key list&#039;&#039;&#039; to check.&lt;br /&gt;
&lt;br /&gt;
===systemd integration===&lt;br /&gt;
&lt;br /&gt;
The postgresql-common package contains systemd service files that handle starting/stopping/reloading the installed clusters.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the systemd version shipped with wheezy is incompatible with the &amp;quot;reload&amp;quot; part of the service files.&lt;br /&gt;
Upgrade to the systemd version in wheezy-backports to fix.&lt;br /&gt;
(Users of jessie and newer Debian and Ubuntu versions are not affected, the systemd version there is recent enough.)&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Apt/FAQ&amp;diff=32479</id>
		<title>Apt/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Apt/FAQ&amp;diff=32479"/>
		<updated>2018-09-07T22:00:19Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Development snapshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==apt.postgresql.org FAQ==&lt;br /&gt;
&lt;br /&gt;
==General Questions==&lt;br /&gt;
&lt;br /&gt;
===What&#039;s the difference between the PostgreSQL packages provided by Debian/Ubuntu and by the PGDG apt repository?===&lt;br /&gt;
&lt;br /&gt;
Pretty little, actually. The PGDG packages are built from the same source as the Debian packages (Ubuntu is using the same source for the PostgreSQL server packages as well).&lt;br /&gt;
We try to follow Debian unstable&#039;s versions as close as possible, i.e. the packages available here are the same, just rebuilt with a &amp;quot;.pgdg&amp;quot; appended to the version number.&lt;br /&gt;
We are also using the same postgresql-common infrastructure packages.&lt;br /&gt;
&lt;br /&gt;
===Should I use Debian/Ubuntu&#039;s packages, or the PGDG packages?===&lt;br /&gt;
&lt;br /&gt;
Debian and Ubuntu only ship one PostgreSQL server version per release. For example, there is only PostgreSQL 8.4 in Debian Squeeze/6.0. If that is the version you want, use it. There is no real difference.&lt;br /&gt;
If you want a different PostgreSQL server version, use the PGDG packages.&lt;br /&gt;
&lt;br /&gt;
Same goes for extension module packages, except that we are updating to new upstream versions earlier (following Debian unstable), while Debian/Ubuntu will only accept patches for critical problems in a released distribution.&lt;br /&gt;
&lt;br /&gt;
===What about Debian backports?===&lt;br /&gt;
&lt;br /&gt;
[[http://backports.debian.org Debian backports]] provide newer package versions for released distributions, similar to what the PGDG apt repository does.&lt;br /&gt;
The scope of the backports archive is strictly limited to testing -&amp;gt; stable, and stable -&amp;gt; oldstable backports, though.&lt;br /&gt;
The PGDG apt repository provides a broader range of available packages, and Debian version/PostgreSQL version combinations than what would be possible to provide on backports.&lt;br /&gt;
&lt;br /&gt;
Similar to the previous FAQ question, if the package you want is available on backports, there is nothing wrong with using it.&lt;br /&gt;
&lt;br /&gt;
===Are these packages ready for production?===&lt;br /&gt;
&lt;br /&gt;
As said above, these packages are identical to what Debian/Ubuntu are releasing. So yes, these packages are recommended for production use.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s pgapt.debian.net?===&lt;br /&gt;
&lt;br /&gt;
pgapt.debian.net was the old location of this repository, which was shut down in January 2013.&lt;br /&gt;
&lt;br /&gt;
==Technical Questions==&lt;br /&gt;
&lt;br /&gt;
===How do I dist-upgrade?===&lt;br /&gt;
&lt;br /&gt;
Just update your sources.list entries, and use your favorite package tool.&lt;br /&gt;
&lt;br /&gt;
When compiling packages for several distributions, we append different suffixes to the package version numbers to make sure, upgrades work. Debian Squeeze packages have &amp;quot;.pgdg60+1&amp;quot; appended, Wheezy packages &amp;quot;.pgdg70+1&amp;quot; and so on; likewise &amp;quot;.pgdg12.4+1&amp;quot; for Ubuntu Precise. (Sid packages have &amp;quot;.pgdg+1&amp;quot;, which sorts after all the others in Debian&#039;s version number scheme.) This makes sure packages from the old distribution you used will be properly replaced by packages from the new distribution when you do a dist-upgrade.&lt;br /&gt;
&lt;br /&gt;
===Where is the &amp;quot;stable&amp;quot; distribution?===&lt;br /&gt;
&lt;br /&gt;
We prefer to only use codenames (squeeze, precise, ...) for distribution names. We run a different repository from Debian, so we would never be able to update the stable/oldstable/testing symlinks at the very same time when a new Debian release comes out, and there would be a time window where users would be seeing an inconsistencies. (Also, it is usually better to use codenames in sources.list even for Debian distributions, because then the user decides when it is time for upgrade.)&lt;br /&gt;
&lt;br /&gt;
===I am using a non-LTS release of Ubuntu===&lt;br /&gt;
&lt;br /&gt;
Non-LTS releases of Ubuntu are only added to the repository if the packages from the latest LTS release are incompatible with the release in question.&lt;br /&gt;
Using the latest LTS release instead generally works, unless library dependencies cannot be fulfilled, in which case we will provide updated packages for the non-LTS release.&lt;br /&gt;
&lt;br /&gt;
===I want only specific packages from this repository===&lt;br /&gt;
&lt;br /&gt;
Per default, the PGDG repository will have the same &amp;quot;pinning&amp;quot; priority as your Debian/Ubuntu repositories. This means your existing PostgreSQL packages will be replaced with versions from this repository, because they have greater version numbers. If you do not want this, you need to configure pinning (see apt_preferences(5) for details).&lt;br /&gt;
&lt;br /&gt;
Create the file &#039;&#039;&#039;/etc/apt/preferences.d/pgdg.pref&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 Package: *&lt;br /&gt;
 Pin: release o=apt.postgresql.org&lt;br /&gt;
 Pin-Priority: 200&lt;br /&gt;
&lt;br /&gt;
The default priority for repositories is 500, so 200 will lower the PGDG repository priority enough such you don&#039;t get packages automatically installed from there, but once you have packages installed, they will keep getting upgraded to newer versions from the PGDG repository.&lt;br /&gt;
&lt;br /&gt;
You can check your setup using the &#039;&#039;&#039;apt-cache policy&#039;&#039;&#039; command to see if &amp;quot;200&amp;quot; shows up in the output:&lt;br /&gt;
&lt;br /&gt;
 $ apt-cache policy postgresql-9.1&lt;br /&gt;
 postgresql-9.1:&lt;br /&gt;
   Installed: 9.1.8-1.pgdg70+1&lt;br /&gt;
   Candidate: 9.1.8-1.pgdg70+1&lt;br /&gt;
   Version table:&lt;br /&gt;
  *** 9.1.8-1.pgdg70+1 0&lt;br /&gt;
         &#039;&#039;&#039;200&#039;&#039;&#039; &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; wheezy-pgdg/main amd64 Packages&lt;br /&gt;
         100 /var/lib/dpkg/status&lt;br /&gt;
      9.1.8-1 0&lt;br /&gt;
         500 &amp;lt;nowiki&amp;gt;http://ftp.debian.org/debian/&amp;lt;/nowiki&amp;gt; wheezy/main amd64 Packages&lt;br /&gt;
&lt;br /&gt;
===I want libpq5 for version X, but there is only version Y in the repository===&lt;br /&gt;
&lt;br /&gt;
libpq5 is compatible with older versions, so there is usually little reason to use a specific version. (psql requires at least the version corresponding to its own version, most other software does not really care.) For that reason, we ship the libpq5 package built from the latest stable PostgreSQL server version in the &#039;&#039;main&#039;&#039; archive component.&lt;br /&gt;
&lt;br /&gt;
If you really want to use a different version, the packages are available in separate archive components named after the PostgreSQL major version. Append that version after &amp;quot;main&amp;quot; in your sources.list. For example, if you wanted 9.0&#039;s libpq5 on Debian Squeeze, use this:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; squeeze-pgdg main &#039;&#039;&#039;9.0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that the other libpq5 package will still be visible in the &amp;quot;main&amp;quot; component, so you will need to configure pinning or set that package on hold to prevent apt from trying to upgrade to the newer version.&lt;br /&gt;
&lt;br /&gt;
===I want to try the beta version of the next PostgreSQL release===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING&#039;&#039;&#039;: The data format may change between beta releases. Be prepared to &#039;&#039;pg_dump&#039;&#039; the database contents before you upgrade the package to a newer beta or to a final release. Check the release notes before upgrading.&lt;br /&gt;
&lt;br /&gt;
We ship packages for beta and RC releases, but like in the previous FAQ entry, you need to add the &#039;&#039;&#039;11&#039;&#039;&#039; component to your &amp;lt;code&amp;gt;/etc/apt/sources.list.d/pgdg.list&amp;lt;/code&amp;gt; entry, so the version 11 packages will be available for installation:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; stretch-pgdg main &#039;&#039;&#039;11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Development snapshots===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING&#039;&#039;&#039;: Development snapshots are meant for testing purposes only, and the catalog version will change frequently. Don&#039;t store any data you cannot afford to lose.&lt;br /&gt;
&lt;br /&gt;
Development snapshots of &#039;&#039;&#039;postgresql-11&#039;&#039;&#039; are being built every 6 hours, directly from git. The packages are available for &#039;&#039;&#039;amd64 only&#039;&#039;&#039;, for the following distributions:&lt;br /&gt;
&#039;&#039;&#039;sid-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;stretch-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;jessie-pgdg-testing&#039;&#039;&#039;, &#039;&#039;&#039;xenial-pgdg-testing&#039;&#039;&#039;, and &#039;&#039;&#039;trusty-pgdg-testing&#039;&#039;&#039;. You need to add a sources.list entry including the &#039;&#039;&#039;11&#039;&#039;&#039; component, e.g. for xenial:&lt;br /&gt;
&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; &#039;&#039;&#039;xenial-pgdg-testing&#039;&#039;&#039; main &#039;&#039;&#039;11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, slightly more generally:&lt;br /&gt;
&lt;br /&gt;
  sudo add-apt-repository &amp;quot;deb &amp;lt;nowiki&amp;gt;https://apt.postgresql.org/repos/apt/&amp;lt;/nowiki&amp;gt; $(lsb_release -s -c)-pgdg-testing main 11&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===After updating from an alpha or beta release I get an error about CATALOG_VERSION===&lt;br /&gt;
&lt;br /&gt;
After upgrading from an alpha or beta package, I get an error like:&lt;br /&gt;
&lt;br /&gt;
 The database cluster was initialized with CATALOG_VERSION_NO X, but the server was compiled with CATALOG_VERSION_NO Y.&lt;br /&gt;
&lt;br /&gt;
This is because the PostgreSQL data format can change between alpha releases - and occasionally even between beta releases if there&#039;s a really pressing need.&lt;br /&gt;
&lt;br /&gt;
If you need to access the old data, you will need to use the package version you were running before, and use &#039;&#039;pg_dump&#039;&#039; or &#039;&#039;pg_upgrade&#039;&#039;.&lt;br /&gt;
The necessary binaries should have been saved in /var/tmp/postgresql*.&lt;br /&gt;
Alternatively, look for the old packages in your &#039;&#039;/var/cache/apt/archives&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===What are the testing distributions?===&lt;br /&gt;
&lt;br /&gt;
We have distributions squeeze-pgdg-testing, precise-pgdg-testing, sid-pgdg-testing, ... which receive all updates before they are promoted to the &amp;quot;live&amp;quot; distributions. These are not meant for production use, but you are welcome to use them and help debugging and testing the packages. Please join the mailing list or the IRC channel. The distributions have a lower apt priority by default, you will have to set up pinning (e.g. with priority 500) if you want them to be used automatically.&lt;br /&gt;
&lt;br /&gt;
===Can I mirror the repository?===&lt;br /&gt;
&lt;br /&gt;
For a full mirror of some or all distributions, we suggest to use &#039;&#039;debmirror&#039;&#039;. For mirroring just a subset of packages, &#039;&#039;reprepro&#039;&#039; offers the ability to &amp;quot;pull&amp;quot; packages from remote repositories.&lt;br /&gt;
&lt;br /&gt;
===Where are older versions of the packages?===&lt;br /&gt;
&lt;br /&gt;
The *-pgdg distributions only contain the most recent version of each package. Older versions are available in the morgue at&lt;br /&gt;
http://atalia.postgresql.org/morgue/.&lt;br /&gt;
&lt;br /&gt;
(There is no dists/ structure, and the provided Packages.xz and Sources.xz files contain all packages for all distributions, users will need to choose the correct files manually.)&lt;br /&gt;
&lt;br /&gt;
===GPG error: invalid signatures===&lt;br /&gt;
&lt;br /&gt;
If you are getting errors from &#039;&#039;apt-get update&#039;&#039; like:&lt;br /&gt;
&lt;br /&gt;
 W: A error occurred during the signature verification. The repository is not&lt;br /&gt;
 updated and the previous index files will be used. GPG error:&lt;br /&gt;
 http://apt.postgresql.org squeeze-pgdg Release: The following signatures were invalid: KEYEXPIRED 1381654177&lt;br /&gt;
&lt;br /&gt;
... you have an outdated copy of the repository key. In most cases &#039;&#039;&#039;rm /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg&#039;&#039;&#039; will fix it by removing the &#039;&#039;second&#039;&#039; copy of the key.&lt;br /&gt;
Use &#039;&#039;&#039;apt-key list&#039;&#039;&#039; to check.&lt;br /&gt;
&lt;br /&gt;
===systemd integration===&lt;br /&gt;
&lt;br /&gt;
The postgresql-common package contains systemd service files that handle starting/stopping/reloading the installed clusters.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the systemd version shipped with wheezy is incompatible with the &amp;quot;reload&amp;quot; part of the service files.&lt;br /&gt;
Upgrade to the systemd version in wheezy-backports to fix.&lt;br /&gt;
(Users of jessie and newer Debian and Ubuntu versions are not affected, the systemd version there is recent enough.)&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Binary_Replication_Tools&amp;diff=32409</id>
		<title>Binary Replication Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Binary_Replication_Tools&amp;diff=32409"/>
		<updated>2018-08-22T20:26:12Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
This is a Work-In-Progress, started Dec 28, 2012.&lt;br /&gt;
&lt;br /&gt;
Additions welcome, and [[User:Selena|Selena]] reserves the right to edit. :)&lt;br /&gt;
&lt;br /&gt;
= Purpose =&lt;br /&gt;
&lt;br /&gt;
Compare binary replication tools for PostgreSQL for features and ease of use. This document should classify and differentiate binary replication tools for easier selection and fit to purpose.&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Tool!!Documentation!!License!!Makes base backups!!Makes base backups from replicas!!Manages backups!!Creates replicas!!Monitors replication delay!!Supports automated failover!!Transport used!!Source includes replication tests&lt;br /&gt;
|- style=&amp;quot;background-color:#ffffcc;&amp;quot;&lt;br /&gt;
| [http://www.postgresql.org/docs/current/static/app-pgbasebackup.html pg_basebackup]*&lt;br /&gt;
| [http://www.postgresql.org/docs/current/static/app-pgbasebackup.html Postgres docs]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| PostgreSQL connection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pgbackrest.org/ pgBackRest]&lt;br /&gt;
| [http://www.pgbackrest.org/user-guide.html Documentation]&lt;br /&gt;
| MIT&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ssh&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pgbarman.org/ pgbarman]&lt;br /&gt;
| [http://docs.pgbarman.org/ Documentation]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| rsync/ssh, pg_basebackup&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/omniti-labs/omnipitr OmniPITR]&lt;br /&gt;
| [https://github.com/omniti-labs/omnipitr/blob/master/doc/intro.pod Intro]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| WAL archive delay&lt;br /&gt;
| No&lt;br /&gt;
| rsync / ssh&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ohmu/pghoard pghoard]&lt;br /&gt;
| [https://github.com/ohmu/pghoard/blob/master/README.rst Readme]&lt;br /&gt;
| Apache&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| AWS S3, Azure, Ceph, Google Cloud Storage&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://code.google.com/p/pg-rman/ pg-rman]&lt;br /&gt;
| [http://code.google.com/p/pg-rman/wiki/readme Readme]&lt;br /&gt;
| BSD&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| local / NFS mount&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.repmgr.org/ repmgr]&lt;br /&gt;
| [https://github.com/2ndQuadrant/repmgr#readme Readme]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| rsync / ssh&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/markokr/skytools Skytools]&lt;br /&gt;
| [https://github.com/markokr/skytools/blob/master/doc/walmgr3.txt walmgr3]&lt;br /&gt;
| BSD-ish&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wal-e/WAL-E WAL-E]&lt;br /&gt;
| [https://github.com/wal-e/WAL-E#readme Readme]&lt;br /&gt;
| BSD&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| HTTPS/SSL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wal-g/wal-g WAL-G]&lt;br /&gt;
| [https://github.com/wal-g/wal-g/blob/master/README.md README]&lt;br /&gt;
| Apache 2.0&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| HTTPS/SSL&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* pg_basebackup is included with a standard PostgreSQL installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tool&#039;&#039;&#039;: name of the project that manages binary replication or WAL archiving&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Documentation&#039;&#039;&#039;: Link to canonical documentation for the project. Several projects have broken links that show up as top results in Google.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;License&#039;&#039;&#039;: License software is released under. So far, we only have open/free software projects listed. We could add commercial projects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Makes base backups&#039;&#039;&#039;: Yes if the project supports creating binary archives, including the necessary WAL to restore a backed-up instance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Makes base backups from replicas&#039;&#039;&#039;: Yes if the project supports creating binary archives and WAL using the PGDATA directory from a replica rather than the master database.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Manages backups&#039;&#039;&#039;: Yes if the project adds, removes and lists binary archives.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creates replicas&#039;&#039;&#039;: Yes if the project automatically adds a recovery.conf (sets up replication) as part of restoring a base backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monitors replication delay&#039;&#039;&#039;: Yes if the project supports monitoring of replication delay (WAL shipping or streaming replication).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supports automated failover&#039;&#039;&#039;: Yes if the project has an option for detecting master failure and promoting a replica to master.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transport used&#039;&#039;&#039;: Supported methods for file transfer for making backups or replicas&lt;br /&gt;
&lt;br /&gt;
= Barman =&lt;br /&gt;
&lt;br /&gt;
[http://www.pgbarman.org/ pgbarman] [https://github.com/selenamarie/pg_replication_demo/tree/master/barman Demo setup for pgbarman]&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Creates base backups&lt;br /&gt;
* Uses SSH as transport for backup&lt;br /&gt;
* Configuration stored in file or command-line&lt;br /&gt;
* Restore is automatable for creating replicas, although not explictly supported&lt;br /&gt;
* GPLv3&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* Had a dependency problem with 9.1 on Ubuntu Precise, so installed from source&lt;br /&gt;
* Missing dep for argcomplete, noted in README in demo repo&lt;br /&gt;
* written in Python&lt;br /&gt;
&lt;br /&gt;
= OmniPITR =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/omniti-labs/omnipitr OmniPITR]&lt;br /&gt;
[https://github.com/selenamarie/pg_replication_demo/tree/master/omnipitr Demo of a simple replication setup with OmniPITR]&lt;br /&gt;
&lt;br /&gt;
Summary of Features:&lt;br /&gt;
* Creating PITR backups from Master or Slave&lt;br /&gt;
* Restoring a PITR backup for DR&lt;br /&gt;
* Creating replicas (by untarring backups)&lt;br /&gt;
* Monitoring of replicas&lt;br /&gt;
* Supports &#039;pause removal&#039; of WAL during a backup (nice!)&lt;br /&gt;
* PostgreSQL license&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* No packaging, perl&lt;br /&gt;
* No documented support for streaming replication&lt;br /&gt;
* Uses &#039;^&#039; instead of &#039;%&#039; in custom logfile naming&lt;br /&gt;
* No configuration file option (instead of using long command-line options)&lt;br /&gt;
* Supported on all Linux, Solaris variants&lt;br /&gt;
&lt;br /&gt;
= pgBackRest =&lt;br /&gt;
&lt;br /&gt;
[http://www.pgbackrest.org/ pgBackRest]&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Parallel Backup &amp;amp; Restore&lt;br /&gt;
* Local or Remote Operation&lt;br /&gt;
* Full, Incremental, &amp;amp; Differential Backups&lt;br /&gt;
* Backup &amp;amp; Archive Expiration&lt;br /&gt;
* Backup Resume&lt;br /&gt;
* Streaming Compression &amp;amp; Checksums&lt;br /&gt;
* Delta Restore&lt;br /&gt;
* Parallel WAL Archiving&lt;br /&gt;
* Tablespace &amp;amp; Link Support&lt;br /&gt;
* Compatibility with PostgreSQL &amp;gt;= 8.3&lt;br /&gt;
* S3 Support&lt;br /&gt;
&lt;br /&gt;
= pghoard =&lt;br /&gt;
&lt;br /&gt;
https://github.com/ohmu/pghoard&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Stores basebackups and WAL to cloud object stores (AWS S3, Azure, Ceph, Google Cloud)&lt;br /&gt;
* Restore existing basebackups and setup a new cluster with a recovery.conf pointing to another master database&lt;br /&gt;
* Create scheduled basebackups&lt;br /&gt;
* Can be used as archive_command to archive WALs in the object store&lt;br /&gt;
* Can be used as restore_command to restore WALs from the object store&lt;br /&gt;
* Basebackup and WAL compression using LZMA&lt;br /&gt;
* Optionally encrypts backups&lt;br /&gt;
* Supports PITR using timestamps, names and xids&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* Written in Python, includes Debian and Fedora packaging scripts&lt;br /&gt;
* &#039;pghoard&#039; daemon manages basebackups and cleans up WALs&lt;br /&gt;
* &#039;pghoard_archive_command&#039; and &#039;pghoard_restore&#039; access the locally running &#039;pghoard&#039; daemon to store and restore files&lt;br /&gt;
&lt;br /&gt;
= pg-rman =&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pg-rman/ pg-rman] [https://github.com/selenamarie/pg_replication_demo/tree/master/pgrman Simple demo for pg_rman setup]&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Online backup and recovery, including backup from a replica&lt;br /&gt;
* Archive management and restore&lt;br /&gt;
* .ini configuration file&lt;br /&gt;
* Simple command-line options&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* Written in C, install with &#039;make USE_PGXS=1&#039;&lt;br /&gt;
* On Ubuntu/Debian, installs in non-default bin directory&lt;br /&gt;
* Commands are simple, manages WAL archive as well as backups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= repmgr =&lt;br /&gt;
&lt;br /&gt;
[http://www.repmgr.org/ repmgr]&lt;br /&gt;
[https://github.com/2ndQuadrant/repmgr GitHub repository]&lt;br /&gt;
[https://github.com/selenamarie/pg_replication_demo/tree/master/repmgr Demo of a simple setup with repmgr]&lt;br /&gt;
&lt;br /&gt;
Supported features:&lt;br /&gt;
* Setting up new replicas/hot_standby with streaming replication (makes recovery.conf itself)&lt;br /&gt;
* Making base backups&lt;br /&gt;
* Failover (automated, or not, including redirecting replicas to connect to a new master after failover)&lt;br /&gt;
* Lag monitoring (repmgrd)&lt;br /&gt;
* A &amp;quot;witness&amp;quot; DB server for monitoring (typically on a replica)&lt;br /&gt;
* License: GPLv3&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* Written in C&lt;br /&gt;
* Developed on Debian systems, so support for package is present. [https://launchpad.net/repmgr Ubuntu packages] are available since Trusty (14.04).&lt;br /&gt;
* Otherwise, installs like a typical UNIX utility out of postgresql/contrib source tree (make USE_PGXS=1; make USE_PGXS=1 install)&lt;br /&gt;
* Detailed docs are in [https://github.com/2ndQuadrant/repmgr the README] for installing on many Linux platforms&lt;br /&gt;
* Doesn&#039;t appear to be supported on Mac OS X&lt;br /&gt;
&lt;br /&gt;
= Skytools / walmgr =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/markokr/skytools Skytools]&lt;br /&gt;
&lt;br /&gt;
= WAL-E =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/wal-e/wal-e WAL-E]&lt;br /&gt;
&lt;br /&gt;
= WAL-G =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/wal-g/wal-g WAL-G]&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Archive management and restore&lt;br /&gt;
* Inspired by WAL-E&lt;br /&gt;
* High performance&lt;br /&gt;
* Parallelized operation&lt;br /&gt;
&lt;br /&gt;
Installation notes:&lt;br /&gt;
* Written in Go, install with the usual Go tools.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Binary_Replication_Tools&amp;diff=32406</id>
		<title>Binary Replication Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Binary_Replication_Tools&amp;diff=32406"/>
		<updated>2018-08-21T19:40:36Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Comparison Matrix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
This is a Work-In-Progress, started Dec 28, 2012.&lt;br /&gt;
&lt;br /&gt;
Additions welcome, and [[User:Selena|Selena]] reserves the right to edit. :)&lt;br /&gt;
&lt;br /&gt;
= Purpose = &lt;br /&gt;
&lt;br /&gt;
Compare binary replication tools for PostgreSQL for features and ease of use. This document should classify and differentiate binary replication tools for easier selection and fit to purpose.&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Tool!!Documentation!!License!!Makes base backups!!Makes base backups from replicas!!Manages backups!!Creates replicas!!Monitors replication delay!!Supports automated failover!!Transport used!!Source includes replication tests&lt;br /&gt;
|- style=&amp;quot;background-color:#ffffcc;&amp;quot;&lt;br /&gt;
| [http://www.postgresql.org/docs/current/static/app-pgbasebackup.html pg_basebackup]*&lt;br /&gt;
| [http://www.postgresql.org/docs/current/static/app-pgbasebackup.html Postgres docs]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| PostgreSQL connection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pgbackrest.org/ pgBackRest]&lt;br /&gt;
| [http://www.pgbackrest.org/user-guide.html Documentation]&lt;br /&gt;
| MIT&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ssh&lt;br /&gt;
| Yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pgbarman.org/ pgbarman]&lt;br /&gt;
| [http://docs.pgbarman.org/ Documentation]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| rsync/ssh, pg_basebackup&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/omniti-labs/omnipitr OmniPITR]&lt;br /&gt;
| [https://github.com/omniti-labs/omnipitr/blob/master/doc/intro.pod Intro]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| WAL archive delay&lt;br /&gt;
| No&lt;br /&gt;
| rsync / ssh&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ohmu/pghoard pghoard]&lt;br /&gt;
| [https://github.com/ohmu/pghoard/blob/master/README.rst Readme]&lt;br /&gt;
| Apache&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| AWS S3, Azure, Ceph, Google Cloud Storage&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://code.google.com/p/pg-rman/ pg-rman]&lt;br /&gt;
| [http://code.google.com/p/pg-rman/wiki/readme Readme]&lt;br /&gt;
| BSD&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| local / NFS mount&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.repmgr.org/ repmgr]&lt;br /&gt;
| [https://github.com/2ndQuadrant/repmgr#readme Readme]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| rsync / ssh&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/markokr/skytools Skytools]&lt;br /&gt;
| [https://github.com/markokr/skytools/blob/master/doc/walmgr3.txt walmgr3]&lt;br /&gt;
| BSD-ish&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wal-e/WAL-E WAL-E]&lt;br /&gt;
| [https://github.com/wal-e/WAL-E#readme Readme]&lt;br /&gt;
| BSD&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Manual&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| HTTPS/SSL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wal-g/wal-g WAL-G]&lt;br /&gt;
| [https://github.com/wal-g/wal-g/blob/master/README.md README]&lt;br /&gt;
| Apache 2.0&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Manual&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| HTTPS/SSL&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* pg_basebackup is included with a standard PostgreSQL installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tool&#039;&#039;&#039;: name of the project that manages binary replication or WAL archiving&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Documentation&#039;&#039;&#039;: Link to canonical documentation for the project. Several projects have broken links that show up as top results in Google.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;License&#039;&#039;&#039;: License software is released under. So far, we only have open/free software projects listed. We could add commercial projects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Makes base backups&#039;&#039;&#039;: Yes if the project supports creating binary archives, including the necessary WAL to restore a backed-up instance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Makes base backups from replicas&#039;&#039;&#039;: Yes if the project supports creating binary archives and WAL using the PGDATA directory from a replica rather than the master database.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Manages backups&#039;&#039;&#039;: Yes if the project adds, removes and lists binary archives.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creates replicas&#039;&#039;&#039;: Yes if the project automatically adds a recovery.conf (sets up replication) as part of restoring a base backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monitors replication delay&#039;&#039;&#039;: Yes if the project supports monitoring of replication delay (WAL shipping or streaming replication).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supports automated failover&#039;&#039;&#039;: Yes if the project has an option for detecting master failure and promoting a replica to master.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transport used&#039;&#039;&#039;: Supported methods for file transfer for making backups or replicas&lt;br /&gt;
&lt;br /&gt;
= Barman = &lt;br /&gt;
&lt;br /&gt;
[http://www.pgbarman.org/ pgbarman] [https://github.com/selenamarie/pg_replication_demo/tree/master/barman Demo setup for pgbarman]&lt;br /&gt;
&lt;br /&gt;
Summary of features: &lt;br /&gt;
* Creates base backups&lt;br /&gt;
* Uses SSH as transport for backup&lt;br /&gt;
* Configuration stored in file or command-line&lt;br /&gt;
* Restore is automatable for creating replicas, although not explictly supported&lt;br /&gt;
* GPLv3&lt;br /&gt;
&lt;br /&gt;
Install notes: &lt;br /&gt;
* Had a dependency problem with 9.1 on Ubuntu Precise, so installed from source&lt;br /&gt;
* Missing dep for argcomplete, noted in README in demo repo&lt;br /&gt;
* written in Python&lt;br /&gt;
&lt;br /&gt;
= OmniPITR = &lt;br /&gt;
&lt;br /&gt;
[https://github.com/omniti-labs/omnipitr OmniPITR]&lt;br /&gt;
[https://github.com/selenamarie/pg_replication_demo/tree/master/omnipitr Demo of a simple replication setup with OmniPITR]&lt;br /&gt;
&lt;br /&gt;
Summary of Features:&lt;br /&gt;
* Creating PITR backups from Master or Slave&lt;br /&gt;
* Restoring a PITR backup for DR&lt;br /&gt;
* Creating replicas (by untarring backups)&lt;br /&gt;
* Monitoring of replicas&lt;br /&gt;
* Supports &#039;pause removal&#039; of WAL during a backup (nice!)&lt;br /&gt;
* PostgreSQL license&lt;br /&gt;
&lt;br /&gt;
Install notes: &lt;br /&gt;
* No packaging, perl &lt;br /&gt;
* No documented support for streaming replication&lt;br /&gt;
* Uses &#039;^&#039; instead of &#039;%&#039; in custom logfile naming&lt;br /&gt;
* No configuration file option (instead of using long command-line options)&lt;br /&gt;
* Supported on all Linux, Solaris variants&lt;br /&gt;
&lt;br /&gt;
= pgBackRest =&lt;br /&gt;
&lt;br /&gt;
[http://www.pgbackrest.org/ pgBackRest]&lt;br /&gt;
&lt;br /&gt;
Summary of features: &lt;br /&gt;
* Parallel Backup &amp;amp; Restore&lt;br /&gt;
* Local or Remote Operation&lt;br /&gt;
* Full, Incremental, &amp;amp; Differential Backups&lt;br /&gt;
* Backup &amp;amp; Archive Expiration&lt;br /&gt;
* Backup Resume&lt;br /&gt;
* Streaming Compression &amp;amp; Checksums&lt;br /&gt;
* Delta Restore&lt;br /&gt;
* Parallel WAL Archiving&lt;br /&gt;
* Tablespace &amp;amp; Link Support&lt;br /&gt;
* Compatibility with PostgreSQL &amp;gt;= 8.3&lt;br /&gt;
* S3 Support&lt;br /&gt;
&lt;br /&gt;
= pghoard =&lt;br /&gt;
&lt;br /&gt;
https://github.com/ohmu/pghoard&lt;br /&gt;
&lt;br /&gt;
Summary of features:&lt;br /&gt;
* Stores basebackups and WAL to cloud object stores (AWS S3, Azure, Ceph, Google Cloud)&lt;br /&gt;
* Restore existing basebackups and setup a new cluster with a recovery.conf pointing to another master database&lt;br /&gt;
* Create scheduled basebackups&lt;br /&gt;
* Can be used as archive_command to archive WALs in the object store&lt;br /&gt;
* Can be used as restore_command to restore WALs from the object store&lt;br /&gt;
* Basebackup and WAL compression using LZMA&lt;br /&gt;
* Optionally encrypts backups&lt;br /&gt;
* Supports PITR using timestamps, names and xids&lt;br /&gt;
&lt;br /&gt;
Install notes:&lt;br /&gt;
* Written in Python, includes Debian and Fedora packaging scripts&lt;br /&gt;
* &#039;pghoard&#039; daemon manages basebackups and cleans up WALs&lt;br /&gt;
* &#039;pghoard_archive_command&#039; and &#039;pghoard_restore&#039; access the locally running &#039;pghoard&#039; daemon to store and restore files&lt;br /&gt;
&lt;br /&gt;
= pg-rman =&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pg-rman/ pg-rman] [https://github.com/selenamarie/pg_replication_demo/tree/master/pgrman Simple demo for pg_rman setup]&lt;br /&gt;
&lt;br /&gt;
Summary of features: &lt;br /&gt;
* Online backup and recovery, including backup from a replica&lt;br /&gt;
* Archive management and restore&lt;br /&gt;
* .ini configuration file&lt;br /&gt;
* Simple command-line options&lt;br /&gt;
&lt;br /&gt;
Install notes: &lt;br /&gt;
* Written in C, install with &#039;make USE_PGXS=1&#039;&lt;br /&gt;
* On Ubuntu/Debian, installs in non-default bin directory&lt;br /&gt;
* Commands are simple, manages WAL archive as well as backups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= repmgr =&lt;br /&gt;
&lt;br /&gt;
[http://www.repmgr.org/ repmgr]&lt;br /&gt;
[https://github.com/2ndQuadrant/repmgr GitHub repository]&lt;br /&gt;
[https://github.com/selenamarie/pg_replication_demo/tree/master/repmgr Demo of a simple setup with repmgr]&lt;br /&gt;
&lt;br /&gt;
Supported features:&lt;br /&gt;
* Setting up new replicas/hot_standby with streaming replication (makes recovery.conf itself)&lt;br /&gt;
* Making base backups&lt;br /&gt;
* Failover (automated, or not, including redirecting replicas to connect to a new master after failover)&lt;br /&gt;
* Lag monitoring (repmgrd)&lt;br /&gt;
* A &amp;quot;witness&amp;quot; DB server for monitoring (typically on a replica)&lt;br /&gt;
* License: GPLv3&lt;br /&gt;
&lt;br /&gt;
Install notes: &lt;br /&gt;
* Written in C&lt;br /&gt;
* Developed on Debian systems, so support for package is present. [https://launchpad.net/repmgr Ubuntu packages] are available since Trusty (14.04).&lt;br /&gt;
* Otherwise, installs like a typical UNIX utility out of postgresql/contrib source tree (make USE_PGXS=1; make USE_PGXS=1 install)&lt;br /&gt;
* Detailed docs are in [https://github.com/2ndQuadrant/repmgr the README] for installing on many Linux platforms&lt;br /&gt;
* Doesn&#039;t appear to be supported on Mac OS X&lt;br /&gt;
&lt;br /&gt;
= Skytools / walmgr =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/markokr/skytools Skytools]&lt;br /&gt;
&lt;br /&gt;
= WAL-E =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/wal-e/wal-e WAL-E]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=32401</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=32401"/>
		<updated>2018-08-20T01:36:26Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is THE Open Source management tool for your PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editting tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Django/Python (multi-platform), browser-based&lt;br /&gt;
&lt;br /&gt;
Open source full-featured web tool for database management. Currently supports PostgreSQL only. More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Free GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or proprietary license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a proprietary version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;br /&gt;
* SQuirrel:  website 404.  http://squirrel-sql.sourceforge.net/&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=32400</id>
		<title>PostgreSQL Clients</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=32400"/>
		<updated>2018-08-20T01:29:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a partial list of interactive SQL clients - that doesn&#039;t include reporting engines, ETL data loaders, visual design tools, just interactive clients that you can type SQL in to and get results from them.&lt;br /&gt;
&lt;br /&gt;
== CLI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== psql ====&lt;br /&gt;
&lt;br /&gt;
https://www.postgresql.org/docs/current/static/app-psql.html&lt;br /&gt;
&lt;br /&gt;
The standard command line client, maintained by the postgresql development group and typically distributed as part of the server installation.&lt;br /&gt;
&lt;br /&gt;
==== pgcli ====&lt;br /&gt;
&lt;br /&gt;
https://www.pgcli.com&lt;br /&gt;
&lt;br /&gt;
A command line client with syntax highlighting and pop-up command completion.&lt;br /&gt;
&lt;br /&gt;
==== jaqy ====&lt;br /&gt;
&lt;br /&gt;
https://teradata.github.io/jaqy/&lt;br /&gt;
&lt;br /&gt;
A universal JDBC command line client with lots of features.  It is not specific to PostgreSQL, but it is pre-configured to handle PostgreSQL servers.  Requires PostgreSQL JDBC driver.&lt;br /&gt;
&lt;br /&gt;
== macOS GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Postbird ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLPro for Postgres ====&lt;br /&gt;
&lt;br /&gt;
http://www.macpostgresclient.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
macOS 10.8 and above&lt;br /&gt;
&lt;br /&gt;
100% native OS X app with a clean and simple to use interface. Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
&lt;br /&gt;
==== TablePlus ====&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
A modern, native client for relational databases with nice UI and very convenient query editor. It&#039;s compatible with all versions of Postgres.&lt;br /&gt;
&lt;br /&gt;
==== Postico ====&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
A nice native client by the developers of [http://postgresapp.com Postgres.app].  A free &amp;quot;demo&amp;quot; version of an inexpensive proprietary app, but it has very reasonable limits and no time limit.&lt;br /&gt;
&lt;br /&gt;
==== pgEdit ====&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Not a standalone client, rather a plugin for [https://macromates.com Textmate] for using psql.&lt;br /&gt;
&lt;br /&gt;
==== PSequel ====&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
==== SEQUEL for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases.&lt;br /&gt;
&lt;br /&gt;
== Windows GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== DBTools Manager ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines.&lt;br /&gt;
&lt;br /&gt;
==== EMS SQL Manager for PostgreSQL Freeware ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
&lt;br /&gt;
There is a proprietary version available with significantly more functionality.&lt;br /&gt;
&lt;br /&gt;
==== Marshal SQL Utility ====&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
==== dbForge Studio for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
dbForge Studio for PostgreSQL is a GUI tool for managing and developing databases and objects. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and UI. The tool provides a data editing tool to customize your queries and property window so that users can view all the required information of PostgreSQL database objects they are interested in.&lt;br /&gt;
&lt;br /&gt;
==== AnySQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
https://www.sqlmaestro.com/products/postgresql/maestro/&lt;br /&gt;
&lt;br /&gt;
Allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
==== Access ====&lt;br /&gt;
&lt;br /&gt;
https://products.office.com/en-us/access&lt;br /&gt;
&lt;br /&gt;
Yes, you can use MS Access as a PostgreSQL database interface. Supports data access to PostgreSQL tables and views; many ODBC-based limitations and errors.&lt;br /&gt;
&lt;br /&gt;
==== VSQL++ for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpp.com/products/postgresql-management/&lt;br /&gt;
&lt;br /&gt;
A powerful Postgresql database management tool to help DBA sto manage the database objects easy and quickly.&lt;br /&gt;
&lt;br /&gt;
==== Nucleon Database Master ====&lt;br /&gt;
&lt;br /&gt;
http://nucleonsoftware.com/products/database-master&lt;br /&gt;
&lt;br /&gt;
Supports PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite&lt;br /&gt;
&lt;br /&gt;
==== SQLPro ====&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== PGExplorer ====&lt;br /&gt;
&lt;br /&gt;
http://www.PGExplorer.com&lt;br /&gt;
&lt;br /&gt;
Hasn&#039;t been significantly updated in many years, but latest downloads suggest it may support Postgresql 9.* to some extent.&lt;br /&gt;
&lt;br /&gt;
== Linux / Unix GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Gnome DB ====&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
Has an experimental Windows build available too.&lt;br /&gt;
&lt;br /&gt;
==== Kexi ====&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
A visual database application creator, c.f. Access or FileMaker&lt;br /&gt;
&lt;br /&gt;
== Cross-platform GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 3 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, Linux, FreeBSD, macOS, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
For many years the &amp;quot;standard&amp;quot; freely available GUI client for Postgresql, and so is bundled in many packaged installers. It provides a SQL query tool, an editor for procedural languages and a CRUD interface. It&#039;s also one of the few clients to provide a GUI front end to the plpgsql debugger.&lt;br /&gt;
&lt;br /&gt;
Development has been discontinued by pgadmin.org,  but it is still being maintained by BigSQL who are doing basic maintenance to support current versions of PostgreSQL and packaging it for current OS releases [[https://www.openscg.com/bigsql/pgadmin3/index.jsp/ here]]&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, [https://yum.postgresql.org rpm], Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== LibreOffice Base ====&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/discover/base/&lt;br /&gt;
&lt;br /&gt;
Supports MySQL/MariaDB, Adabas D, MS Access and PostgreSQL, as well as other JDBC/ODBC databases.&lt;br /&gt;
&lt;br /&gt;
==== Tora ====&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux, Windows, macOS&lt;br /&gt;
&lt;br /&gt;
Oracle, MySQL, and PostgreSQL, as well as limited support for ODBC targets.  Inspired by the proprietary Toad client.&lt;br /&gt;
&lt;br /&gt;
==== SQL Workbench/J ====&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
An OpenSource (though it prohibits usage by government agencies from USA, UK, Canada, China, Russia, North Korea, Syria, Saudi Arabia, Turkey and the Chechen Republic) SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
It has some [http://sql-workbench.net/manual/license.html#license-restrictions restrictions] on use by government employees.&lt;br /&gt;
&lt;br /&gt;
==== Druid III ====&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information.&lt;br /&gt;
&lt;br /&gt;
==== Power*Architect ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
==== DBeaver ====&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
==== pgManage ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/pgManage/pgManage&lt;br /&gt;
&lt;br /&gt;
An alternative to pgAdmin, which runs in both application and server modes.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== Valentina Studio (Free) ====&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool.&lt;br /&gt;
&lt;br /&gt;
There is a proprietary version available with additional functionality.&lt;br /&gt;
&lt;br /&gt;
==== RazorSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JetBrains DataGrip ====&lt;br /&gt;
&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multicursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
&lt;br /&gt;
Other JetBrains IDEs have plugins available to provide similar functionality.&lt;br /&gt;
&lt;br /&gt;
==== Aqua Data Studio ====&lt;br /&gt;
&lt;br /&gt;
http://www.aquafold.com/index-postgresql.html&lt;br /&gt;
&lt;br /&gt;
Java: Windows/Linux/macOS/Solaris&lt;br /&gt;
&lt;br /&gt;
Aqua Data Studio is a management tool for the PostgreSQL relational database w/ administration capabilities and a database query tool. The visual administration features provide users the ability to browse and modify database structures, including schema objects, database storage and maintain database security. An integrated query tool allows users to quickly create, edit and execute SQL queries and scripts. Aqua Data Studio also provides an import and export tool to allow users to easily move data in and out of the PostgreSQL database in and from different data formats.&lt;br /&gt;
&lt;br /&gt;
==== Navicat ====&lt;br /&gt;
&lt;br /&gt;
https://www.navicat.com/en/products/navicat-for-postgresql&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, iOS&lt;br /&gt;
&lt;br /&gt;
Navicat is a powerful PostgreSQL Database Server administration and development tool. It works with PostgreSQL 8.0 version or above and supports most of the PostgreSQL features including Trigger, Function, View, Manage User, and so on. It is also not only sophisticated enough for professional developers, but also easy to learn for new users. With its well-designed GUI, Navicat lets you quickly and easily create, organize, access and share information in a secure and easy way.&lt;br /&gt;
&lt;br /&gt;
==== DbVisualizer ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/macOS/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLTool Pro Database Editor ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases. JDBC.&lt;br /&gt;
&lt;br /&gt;
== Web Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== franchise ====&lt;br /&gt;
&lt;br /&gt;
https://franchise.cloud/&lt;br /&gt;
&lt;br /&gt;
Web client, either hosted (free) or running locally, connects to a local postgresql instance via a small bridge application.&lt;br /&gt;
&lt;br /&gt;
Can share the interface with others, rather like sqlfiddle.com, but accessing your database.&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== TeamPostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
==== Adminer ====&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. A single PHP file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
==== OmniDB ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Django/Python&lt;br /&gt;
&lt;br /&gt;
Open source full-featured web tool for database management. Currently supports PostgreSQL only. More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
==== Tadpole DB Hub ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
==== SIDU ====&lt;br /&gt;
&lt;br /&gt;
http://topnew.net/sidu/&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Schema and data browser and editor.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== JackDB ====&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
A hosted service, so it requires external access to your database.&lt;br /&gt;
&lt;br /&gt;
==== DBHawk ====&lt;br /&gt;
&lt;br /&gt;
https://www.datasparc.com/dbhawk/&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Query editor, report builder, schema and data browser.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== phpPgAdmin ====&lt;br /&gt;
&lt;br /&gt;
http://phppgadmin.sourceforge.net/doku.php&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Similar to phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries.&lt;br /&gt;
&lt;br /&gt;
(last updated 2013, 9.2.x)&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
[[Community Guide to PostgreSQL GUI Tools]] - the source for a lot of this page. Includes many non-client tools, such as bulk loaders, schema diff, schema design, etc.&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development] - from 2009&lt;br /&gt;
&lt;br /&gt;
[[GUI Database Design Tools]] - tools for designing database schemas&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Ecosystem:High_Availability_(HA)&amp;diff=32399</id>
		<title>Ecosystem:High Availability (HA)</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Ecosystem:High_Availability_(HA)&amp;diff=32399"/>
		<updated>2018-08-20T01:26:43Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* EDB Postgres Failover Manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== EDB Postgres Failover Manager ==&lt;br /&gt;
&lt;br /&gt;
* Provider -- EnterpriseDB&lt;br /&gt;
* Website -- https://www.edbpostgres.com&lt;br /&gt;
* License -- Proprietary&lt;br /&gt;
* Interoperability level -- explicitly supports PostgreSQL 9.5 or higher&lt;br /&gt;
* Verified PostgreSQL versions -- See: https://www.enterprisedb.com/services/edb-supported-products-and-platforms#EFM&lt;br /&gt;
* Last update (YYYY-MM-DD) -- See: https://www.enterprisedb.com/services/edb-supported-products-and-platforms#EFM&lt;br /&gt;
* Description -- Failover Manager creates highly available fault tolerant clusters minimizing database downtime with health monitoring, failure detection/notification, and automatic failover required in stringent 9s based high availability solutions.  A simple and lightweight architecture without a single point of failure protects against a variety of failure scenarios that can be customized to specific application needs.&lt;br /&gt;
* Additional info -- https://www.enterprisedb.com/products/edb-postgres-platform/edb-postgres-failover-manager&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=32398</id>
		<title>Monitoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=32398"/>
		<updated>2018-08-20T01:15:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL builtin &amp;amp; contrib ==&lt;br /&gt;
&lt;br /&gt;
=== Statistics collector ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL collects lots of data on its own and offers it via the &amp;lt;tt&amp;gt;pg_stat(io)_&amp;lt;/tt&amp;gt; system views&lt;br /&gt;
&lt;br /&gt;
* Official documentation on the [http://www.postgresql.org/docs/current/static/monitoring-stats.html Statistics Collector]&lt;br /&gt;
* [http://www.varlena.com/GeneralBits/107.php Interpreting pg_stat Views]&lt;br /&gt;
&lt;br /&gt;
=== contrib extensions ===&lt;br /&gt;
&lt;br /&gt;
The following extensions offer access to Postgres internals which may be of interest or collect additional information. Most of them are shipped with Postgres (the &amp;lt;tt&amp;gt;-contrib&amp;lt;/tt&amp;gt; packages may need to be installed) and can be activated via the [http://www.postgresql.org/docs/current/static/sql-createextension.html extension interface].&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_statements ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements]&amp;lt;/tt&amp;gt; tracks all queries that are executed on the server and records average runtime per query &amp;quot;class&amp;quot; among other parameters.&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_plans ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/2ndQuadrant/pg_stat_plans pg_stat_plans]&amp;lt;/tt&amp;gt; extends on pg_stat_statements and records query plans for all executed quries. This is very helpful when you&#039;re experiencing performance regressions due to inefficient query plans due to changed parameters or table sizes.&lt;br /&gt;
&lt;br /&gt;
==== pgstattuple ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstattuple.html pgstattuple]&amp;lt;/tt&amp;gt; can generate statistics for tables and indexes, showing how much space in each table &amp;amp; index is consumed by live tuples, deleted tuples as well as how much unused space is available in each relation.&lt;br /&gt;
&lt;br /&gt;
==== pg_buffercache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgbuffercache.html pg_buffercache]&amp;lt;/tt&amp;gt; gives you introspection into Postgres&#039; [http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-SHARED-BUFFERS shared buffers], showing how many pages of which relations are currently held in the cache.&lt;br /&gt;
&lt;br /&gt;
== External projects ==&lt;br /&gt;
&lt;br /&gt;
=== CLI tools ===&lt;br /&gt;
&lt;br /&gt;
==== pg_view ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/zalando/pg_view/ pg_view]&amp;lt;/tt&amp;gt; is a Python-based tool to quickly get information about running databases and resources used by them as well as correlate running queries and why they might be slow.&lt;br /&gt;
&lt;br /&gt;
==== pg_activity ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/julmon/pg_activity pg_activity]&amp;lt;/tt&amp;gt; is a htop like application for PostgreSQL server activity monitoring, written in Python.&lt;br /&gt;
&lt;br /&gt;
==== pgmetrics ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://pgmetrics.io/ pgmetrics]&amp;lt;/tt&amp;gt; collects a lot of information and statistics from a running PostgreSQL server and displays it in easy-to-read text format or export it as JSON for scripting.&lt;br /&gt;
&lt;br /&gt;
==== pgstats ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/gleu/pgstats pgstats]&amp;lt;/tt&amp;gt; is a command line tool written in C which can sample various PostgreSQL informations. It also provides a tool to generate CSV files to graph the pgstats metrics.&lt;br /&gt;
=== Checkers ===&lt;br /&gt;
&lt;br /&gt;
==== check_postgres ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://bucardo.org/wiki/Check_postgres check_postgres]&amp;lt;/tt&amp;gt; is a command line tool which is designed to be run from software like Icinga, MRTG or as a standalone tool. It can monitor many aspects of the database and trigger warnings when thresholds are violated.&lt;br /&gt;
&lt;br /&gt;
=== Interfaces &amp;amp; collectors ===&lt;br /&gt;
&lt;br /&gt;
These tools either offer an interface to PostgreSQL monitoring-relevant data or can aggregate and prepare them for other systems.&lt;br /&gt;
&lt;br /&gt;
==== pgsnmpd ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://pgsnmpd.projects.postgresql.org/ pgsnmpd]&amp;lt;/tt&amp;gt; can run as a standalone SNMP server and implements the [http://www.faqs.org/rfcs/rfc1697.html RFC 1697 MIB] which is generic RDBMS [http://en.wikipedia.org/wiki/Management_information_base MIB]&lt;br /&gt;
&lt;br /&gt;
This is useful for network management systems which are limited to SNMP protocol.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze/collector ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/pganalyze/collector pganalyze/collector]&amp;lt;/tt&amp;gt; is a tool which collects &amp;lt;tt&amp;gt;pg_stat_plans&amp;lt;/tt&amp;gt; query information as well as various performance-relevant database parameters and converts them into a JSON structure for easy ingestion in other systems.&lt;br /&gt;
&lt;br /&gt;
=== Generic monitoring solutions with plugins ===&lt;br /&gt;
&lt;br /&gt;
==== Zabbix ====&lt;br /&gt;
&lt;br /&gt;
[http://pg-monz.github.io/pg_monz/index-en.html pg_monz] is a [http://www.zabbix.com/ Zabbix] monitoring template for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
[http://cavaliercoder.github.io/libzbxpgsql/ libzbxpgsql] is a [http://www.zabbix.com/ Zabbix] monitoring template and native agent module for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
==== Munin ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Plugins developed in Perl are included in the Core [http://munin-monitoring.org/ Munin] Distribution. The following plugins are included by default: &amp;lt;tt&amp;gt;postgres_bgwriter, postgres_locks_, postgres_tuples_, postgres_cache_, postgres_querylength_, postgres_users, postgres_checkpoints, postgres_scans_, postgres_xlog, postgres_connections_, postgres_size_, postgres_connections_db, postgres_transactions_&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://aouyar.github.com/PyMunin/ PyMunin] includes a Multigraph Munin Plugin written in Python that implements the following graphs: &amp;lt;tt&amp;gt;pg_connections, pg_diskspace, pg_blockreads, pg_xact, pg_tup_read, pg_tup_write, pg_blockreads_detail, pg_xact_commit_detail, pg_xact_rollback_detail, pg_tup_return_detail, pg_tup_fetch_detail, pg_tup_delete_detail, pg_tup_update_detail, pg_tup_insert_detail&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== NewRelic ====&lt;br /&gt;
&lt;br /&gt;
[http://newrelic.com/ NewRelic] is a proprietary SaaS application monitoring solution which offers a [https://newrelic.com/plugins/enterprisedb-corporation/30 PostgreSQL plugin] maintained by EnterpriseDB.&lt;br /&gt;
&lt;br /&gt;
====Datadog====&lt;br /&gt;
[http://www.datadoghq.com/ Datadog] is a proprietary saas that collects postgres metrics on connections, transactions, row crud operations, locks, temp files, bgwriter, index usage, replication status, memory, disk, cpu and lets you visualize and alert on those metrics alongside your other system and application metrics.&lt;br /&gt;
&lt;br /&gt;
==== Circonus ====&lt;br /&gt;
[https://www.circonus.com Circonus] is a general purpose monitoring, analytic and alerting saas that has predefined queries for postgres to monitor some of the common metrics and checks like connections, transactions, WALs, vacuum and table stats. More information can be found [https://login.circonus.com/resources/docs/user/Data/CheckTypes/PostgreSQL.html here]&lt;br /&gt;
&lt;br /&gt;
====ClusterControl by Severalnines====&lt;br /&gt;
&lt;br /&gt;
[https://severalnines.com/product/clustercontrol/for_postgresql ClusterControl] is an all-inclusive open source database management system that allows you to deploy, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using the deployment wizard. It offers Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.  Deployment and monitoring are free, with management features as part of a paid version.&lt;br /&gt;
&lt;br /&gt;
==== Cacti ====&lt;br /&gt;
&lt;br /&gt;
There has been work done on building a Postgres template for [http://www.cacti.net/ Cacti], Details can be found at the [[Cacti]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Okmeter====&lt;br /&gt;
&lt;br /&gt;
[http://okmeter.io/pg Okmeter.io] is a proprietary SaaS that collects a whole lot of PostgreSQL status and operational data:  over 50 types of metrics on connections, transactions, table CRUD operations, locks, bgwriter, index usage and ops, replication, autovacuum. Also, query timings, disk and CPU usage by queries from pg_stat_statements, and system metrics — CPU, memory, fd and disk usage per process, socket connections per port and tcp status.  Collecting the data requires minimal to no configuration, there&#039;s pre-built  [https://okmeter.io/example/hosts/db-postgresql1/Postgresql chart dashboards], detailed query reports and pre-set alerts, that will notify you if something&#039;s wrong with you DB. [https://okmeter.io/pg?lang=en More information here] and [https://okmeter.io/i/integrations/postgresql-monitoring?lang=en detailed info of what&#039;s collected - here.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres-centric monitoring solutions ===&lt;br /&gt;
&lt;br /&gt;
==== EnterpriseDB Postgres Enterprise Manager ====&lt;br /&gt;
&lt;br /&gt;
[http://www.enterprisedb.com/products-services-training/products/postgres-enterprise-manager Postgres Enterprise Manager] monitors, alerts, manages and tunes local and remote large scale Postgres deployments from a single graphical console. Out of the box features include: server auto-discovery, point and click management of database objects, 225+ pre-configured database alerts by SMTP/SNMP, custom alerts, global At-a-Glance monitoring dashboards, Performance monitoring dashboards, custom dashboards, an Audit Manager, Postgres Expert best practice configuration recommendations, a Log Manager, a Log Analyzer Expert, a SQL Profiler, and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze ====&lt;br /&gt;
&lt;br /&gt;
[https://pganalyze.com/ pganalyze] is a proprietary SaaS offering which focuses on performance monitoring and automated tuning suggestions.&lt;br /&gt;
&lt;br /&gt;
==== pgwatch2 ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cybertec-postgresql/pgwatch2 pgwatch2] is a self-contained, easy to install and highly configurable PostgreSQL monitoring tool. It is dockerized, features a dashboard and can send alerts. No extensions or superuser privileges required!&lt;br /&gt;
&lt;br /&gt;
==== pg_statsinfo &amp;amp; pg_stats_reporter ====&lt;br /&gt;
&lt;br /&gt;
[http://pgstatsinfo.sourceforge.net/ pg_statsinfo] is a Postgres extension that collects lots of performance-relevant information inside the Postgres server which then can be aggregated by pg_stats_reporter instances which provide a web interface to the collected data. Both are FOSS software maintained by NTT.&lt;br /&gt;
&lt;br /&gt;
==== PGObserver ====&lt;br /&gt;
&lt;br /&gt;
[http://zalando.github.io/PGObserver/ PGObserver] is a Python &amp;amp; Java-based Postgres monitoring solution developed by Zalando. It was developed with a focus on stored procedure performance but extended well beyond that.&lt;br /&gt;
&lt;br /&gt;
==== pgCluu ====&lt;br /&gt;
&lt;br /&gt;
[http://pgcluu.darold.net/ pgCluu] is a Perl-based monitoring solution which uses psql and [http://en.wikipedia.org/wiki/Sar_(Unix) sar] to collect information about Postgres servers and render comprehensive performance stats.&lt;br /&gt;
&lt;br /&gt;
==== PoWA ====&lt;br /&gt;
&lt;br /&gt;
[http://dalibo.github.io/powa/ PoWA] is a PostgreSQL Workload Analyzer that gathers performance stats and provides real-time charts and graphs to help monitor and tune your PostgreSQL servers. It relies on extensions such as pg_stat_statements, pg_qualstats, pg_stat_kcache, pg_track_settings and HypoPG, and can help you optimize you database easily.&lt;br /&gt;
&lt;br /&gt;
==== OPM: Open PostgreSQL Monitoring ====&lt;br /&gt;
&lt;br /&gt;
[http://opm.io Open PostgreSQL Monitoring (OPM)] is a free software suite designed to help you manage your PostgreSQL servers. It&#039;s a flexible tool that will follow the activity of each instance. It can gather stats, display dashboards and send warnings when something goes wrong. The long-term goal of the project is to provide similar features to those of Oracle Grid Control or SQL Server Management Studio.&lt;br /&gt;
&lt;br /&gt;
==== PASH-Viewer: PostgreSQL Active Session History Viewer ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dbacvetkov/PASH-Viewer PASH-Viewer] is a free open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Monitoring|!]]&lt;br /&gt;
[[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Replication,_Clustering,_and_Connection_Pooling&amp;diff=32357</id>
		<title>Replication, Clustering, and Connection Pooling</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Replication,_Clustering,_and_Connection_Pooling&amp;diff=32357"/>
		<updated>2018-08-13T15:33:45Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
There are many approaches available to scale PostgreSQL beyond running on a single server.  An outline of the terminology and basic technologies involved is at [http://www.postgresql.org/docs/current/interactive/high-availability.html High Availability and Load Balancing].  There is a [http://momjian.us/main/writings/pgsql/replication.pdf presentation] covering some of these solutions.&lt;br /&gt;
&lt;br /&gt;
There is no one-size fits all replication software.  You have to understand your requirements and how various approaches fit into that.  For example, here are two extremes in the replication problem space:&lt;br /&gt;
&lt;br /&gt;
* You have a few servers connected to a local network you want to always keep current for failover and load-balancing purposes.  Here you would be considering solutions that are synchronous, eager, and therefore conflict-free.&lt;br /&gt;
* Your users take a local copy of the database with them on laptops when they leave the office, make changes while they are away, and need to merge those with the main database when they return.  Here you&#039;d want an asynchronous, lazy replication approach, and will be forced to consider how to handle conflicts in cases where the same record has been modified both on the primary server and on a local copy.&lt;br /&gt;
&lt;br /&gt;
These are both database replication problems, but the best way to solve them is very different.  And as you can see from these examples, replication has a lot of specific terminology that you&#039;ll have to understand to figure out what class of solution makes sense for your requirements.  A great source for this background is in the&lt;br /&gt;
[http://www.postgres-r.org/documentation/terms Postgres-R Terms and Definitions for Database Replication].  The main theoretical topic it doesn&#039;t mention is how to resolve conflict resolution in lazy replication cases like the laptop situation, which involves voting and similar schemes.&lt;br /&gt;
&lt;br /&gt;
== Features in the Core of PostgreSQL ==&lt;br /&gt;
&lt;br /&gt;
*[[Hot Standby]]/[[Streaming Replication]] is available as of PostgreSQL 9.0 and provides asynchronous binary replication to one or more standbys.  Standbys may also become hot standbys meaning they can be queried as a read-only database.  This is the fastest type of replication available as WAL data is sent immediately rather than waiting for a whole segment to be produced and shipped.&lt;br /&gt;
&lt;br /&gt;
*[[Warm Standby]]/Log Shipping is a HA solution which &#039;replicates&#039; a database cluster to an archive or a warm (can be brought up quickly, but not available for querying) standby server.  Overhead is very low and it&#039;s easy to set up.  This is a simple and appropriate solution if all you care about is continuous backup and short failover times.&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL 9.4&#039;s [[Logical Changeset Extraction]] forms the foundation of the [[Bi-Directional Replication]] and [[Logical Log Streaming Replication]] features being added to PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Historically, the PostgreSQL core team considered replication and clustering technology outside the scope of the main project&#039;s focus but this changed in 2008, see the [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php Core Team&#039;s statement]. Replication is now a significant focus of ongoing PostgreSQL development.&lt;br /&gt;
&lt;br /&gt;
==Comparison matrix==&lt;br /&gt;
&lt;br /&gt;
This page is being overhauled at [[Clustering]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Program&lt;br /&gt;
! License&lt;br /&gt;
! Maturity&lt;br /&gt;
! Replication Method&lt;br /&gt;
! Sync&lt;br /&gt;
! Connection Pooling&lt;br /&gt;
! Load Balancing&lt;br /&gt;
! Query Partitioning&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[PgCluster]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Not production ready&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Master-Master&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | &#039;&#039;&#039;pgpool-I&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Stable&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Statement-Based Middleware&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[Pgpool-II]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Statement-Based Middleware&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[slony]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Stable&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[Bucardo]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Stable&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Master-Master, Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[Londiste]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Stable&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[Mammoth]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | BSD&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | No longer maintained&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [[rubyrep]]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | MIT&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | No longer maintained&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Master-Master, Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [https://2ndquadrant.com/en/resources/bdr/ Bi-Directional Replication]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | PostgreSQL (BSD)&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Master-Master&amp;lt;br/&amp;gt;(no triggers needed)&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [https://www.citusdata.com/citus-products/pg-shard pg_shard]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | LGPL&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Statement-based Middleware (as an extension)&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [http://2ndquadrant.com/resources/pglogical pglogical]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | PostgreSQL&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Primary-Replica&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
| bgcolor=&amp;quot;#ffaaaa&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [http://postgres-xl.org/ Postgres-XL]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | PostgreSQL&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | MPP Postgres, scalable writes &amp;amp; reads&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:block;&amp;quot; bgcolor=&amp;quot;#ececec&amp;quot; | [https://www.citusdata.com/ Citus]&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | AGPL&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Recent release&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | MPP Postgres, scalable writes &amp;amp; reads&lt;br /&gt;
| bgcolor=&amp;quot;#ffffaa&amp;quot; | Asynchronous or Synchronous&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
| bgcolor=&amp;quot;#ddffdd&amp;quot; | Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Replication==&lt;br /&gt;
&lt;br /&gt;
Aside from the in-core streaming replication, mentioned above...&lt;br /&gt;
&lt;br /&gt;
*Slony-I: Seems good, single primary only, primary is a single point of failure, no good failover system for electing a new primary or having a failed primary rejoin the cluster. Replica databases are mostly for safety or for parallelizing queries for performance. Suffers from O(N^2) communications (N = cluster size).  with reasonable sysadmin you can implement failover system yourself.  regarding communications, you can cascade the replication to reduce load on the primary.  If you were implementing a large replication cluster, this would probably be a good idea.  Slony is powerful, trigger based, and highly configurable.&lt;br /&gt;
&lt;br /&gt;
* PGCluster:  PGCluster (which, incidentally, is not the same as PGCluster-II, a shared-disk solution), which does synchronous multimaster replication.  Two single-points failure spots, load balancer and the data replicator.  The project has historically looked a bit dead, but they just released a new version and http://pgfoundry.org/projects/pgcluster is up to date (at least downloads page)  One major downside to PGCluster is that it uses a modified version of PostgreSQL, and it usually lags a few releases behind.&lt;br /&gt;
&lt;br /&gt;
* http://www.pgpool.net/ pgpool 1/2 is a reasonable solution.  it&#039;s statement level replication, which has some downsides, but is good for certain things.  pgpool 2 has a neat distributed table mechanism which is interesting.  You might want to be looking here if you have extremely high ratios of read to write but need to service a huge transaction volume.  Supports load-balancing and replication by implementing a proxy that duplicates all updates to all replicas. It can partition data by doing this, and it can semi-intelligently route queries to the appropriate servers.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Mammoth Replicator&amp;quot; - BSD - http://www.commandprompt.com/products/mammothreplicator/ - Former proprietary solution, now open source. Uses a central logging process to distribute data changes amongst nodes. Essentially a fork of Postgres, as the changes are written directly into the backend.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Bucardo&amp;quot; - BSD License - http://bucardo.org/ - Trigger-based, asynchronous, multi-master or primary-replica, written using plperl.&lt;br /&gt;
&lt;br /&gt;
* Cybertec, an Austrian company, offers a proprietary packaging of PGCluster. They simply call it PostgreSQL Multimaster-Replication, see http://www.cybertec.at.&lt;br /&gt;
&lt;br /&gt;
* [[Londiste_Tutorial|Londiste]], a part of [[Skytools]] (https://developer.skype.com/SkypeGarage/DbProjects/SkyTools) which is a collection of replication tools from the Skype people. Purports to be simpler to use than Slony.&lt;br /&gt;
&lt;br /&gt;
* [https://2ndquadrant.com/en/resources/bdr/ BDR (Bi-Directional Replication for PostgreSQL)] - multi-master replication based on log streaming logical replication.&lt;br /&gt;
&lt;br /&gt;
* [https://2ndquadrant.com/en/resources/pglogical/ pglogical] - pglogical is a logical replication system implemented entirely as a PostgreSQL extension. Fully integrated, it requires no triggers or external programs. This alternative to physical replication is a highly efficient method of replicating data using a publish/subscribe model for selective replication.&lt;br /&gt;
&lt;br /&gt;
* [http://www.continuent.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=212&amp;amp;Itemid=169 Continuent uni/cluster], proprietary and the related Sequoia (jdbc, formerly known as c-jdbc)&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgres-r.org Postgres-R] is still in development. It features eager and thus conflict-free, but async multi-master replication.&lt;br /&gt;
&lt;br /&gt;
* [http://symmetricds.codehaus.org/ SymmetricDS] is an open-source, web-enabled, database independent, data synchronization software application. It uses web and database technologies to replicate tables between relational databases in near real time. The software was designed to scale for a large number of databases, work across low-bandwidth connections, and withstand periods of network outages. Supports several relational databases, including PostgreSQL. Licensed under Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
* DRBD (http://www.drbd.org/), a device driver that replicates disk blocks to other nodes. This works for failover only, not for scaling reads. Easy migration of devices if combined with an NFS export.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/daffodilreplica/ Daffodil Replicator]. Supports several relational databases, including PostgreSQL. Licensed under GPL.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RubyRep&amp;quot; - MIT License - http://www.rubyrep.org/ - Ruby based, asynchronous, multi-master replication system, which supports Postgres and MySQL.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;pg_comparator&amp;quot; - BSD License - http://pgfoundry.org/projects/pg-comparator/ - Perl-based, table-level async primary-replica &amp;quot;diff&amp;quot; and &amp;quot;patch&amp;quot; method of replication.  Low configuration overhead.&lt;br /&gt;
&lt;br /&gt;
* [https://www.citusdata.com/ Citus Data] develops the [https://www.citusdata.com/citus-products/pg-shard pg_shard extension] which can transparently shard a PostgreSQL table across many servers and replicate the shards, and [https://www.citusdata.com/product/citus Citus] which parallelizes queries across many servers and cores for real-time analytics and supports bulk loading, distributed joins, columnar storage and more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.enterprisedb.com/products-services-training/products-overview/tools/ EDB Replication Server]: Provides single and multi-master solutions for read/write scalability, availability, performance, and data integration with Oracle, SQL Server, and Postgres.  EDB Replication Server uses Postgres&#039; fast Logical Decoding technology to support large multi-master clusters and single primary configurations for a wide variety of data center solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Inactive projects===&lt;br /&gt;
* Slony-II&lt;br /&gt;
* PGReplication&lt;br /&gt;
&lt;br /&gt;
==Clustering==&lt;br /&gt;
&lt;br /&gt;
* [https://www.citusdata.com/product/citus Citus] - shards and replicates tables across a scalable, high availability cluster of commodity PostgreSQL servers and parallelizes queries for real-time SQL on big data.&lt;br /&gt;
&lt;br /&gt;
* [http://www.greenplum.org Greenplum Database] - Not so much a replication solution as a way to parallelize queries, and targeted at the data warehousing and big data crowd. Greenplum is tightly integrated with PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.enterprisedb.com/products/gridsql.do GridSQL for EnterpriseDB Advanced Server] (formerly ExtenDB)&lt;br /&gt;
&lt;br /&gt;
* [http://db.cs.yale.edu/hadoopdb/hadoopdb.html HadoopDB] - A MapReduce layer put in front of a cluster of postgres back end servers.   Shared-nothing clustering.&lt;br /&gt;
&lt;br /&gt;
* [[PL/Proxy]] - database partitioning system implemented as PL language.&lt;br /&gt;
&lt;br /&gt;
* [https://postgrespro.com Postgres Pro Multimaster] - part of Postgres Pro Enterprise DBMS. Provides fail-safe shared nothing cluster with transactional integrity and no read overhead. Based on enhanced logical replication.&lt;br /&gt;
&lt;br /&gt;
* [https://www.citusdata.com/citus-products/pg-shard pg_shard] - extension that shards and replicates table across many servers, can also [https://www.citusdata.com/blog/14-marco/178-scaling-out-postgresql-on-amazon-rds-using-masterless-pg-shard scale out Amazon RDS]&lt;br /&gt;
&lt;br /&gt;
* sequoia (jdbc, formerly known as c-jdbc)&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgres-xl.org/ Postgres-XL] is a shared nothing, multi-master clustering solution which can transparently distribute a table on a set of nodes and execute queries in parallel of those nodes. It has a additional component called Global Transaction Manager (GTM) for providing globally consistent view of the cluster. The project is based on the latest available 9.5 release of PostgreSQL. Some companies, such as [http://www.2ndquadrant.com 2ndQuadrant] provides commercial support for the product.&lt;br /&gt;
&lt;br /&gt;
==Connection Pooling and Acceleration==&lt;br /&gt;
&lt;br /&gt;
Connection pooling programs let you reduce database-related overhead when it&#039;s the sheer number of physical connections dragging performance down.  This is particularly important on Windows, where system limitations prevent large number of connections; see &amp;quot;I cannot run with more than about 125 connections at once&amp;quot; in [[Running &amp;amp; Installing PostgreSQL On Native Windows]].  It&#039;s also vital for web applications where the number of connections can get very large.&lt;br /&gt;
&lt;br /&gt;
Some programs that implement connection pooling are:&lt;br /&gt;
* [[PgBouncer]]&lt;br /&gt;
* [http://www.pgpool.net/ pgpool]&lt;br /&gt;
* [https://www.heimdalldata.com/ Heimdall Data] - (Proprietary) Provides a multi-vendor solution for database caching, connection pooling, load balancing, query routing, analytics and security.  Provides a GUI for simple configuration, as well as a distributed engine for processing queries at scale.  Also supports run-time reconfiguration cluster-wide without application restarts.  Requires zero code changes to implement.&lt;br /&gt;
&lt;br /&gt;
Some people also or alternately use [http://www.danga.com/memcached/ memcached] in various ways to reduce the work the database handles directly by caching popular data. [https://github.com/ohmu/pgmemcache/ pgmemcache] is a PostgreSQL extension for interfacing with memcached servers.&lt;br /&gt;
&lt;br /&gt;
== Cluster management ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ohmu/pglookout/ pglookout] - PostgreSQL replication monitoring and failover daemon&lt;br /&gt;
* [[repmgr]] - replication manager for PostgreSQL clusters&lt;br /&gt;
* [https://github.com/MasahikoSawada/pg_keeper/tree/REL1_0_STABLE pg_keeper] - Background worker based simple failover daemon.&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
Sources for more information located but not yet integrated into here.&lt;br /&gt;
&lt;br /&gt;
=== Articles ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://bristlecone.continuent.org/uploads/bristlecone/HomePage/PG_East-Scale-Out-Benchmarks_FINAL2.pdf Portable Scale-Out Benchmarks for PostgreSQL] by Robert Hodges&amp;lt;/strike&amp;gt; not available (2012-10-11)&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://www.fastware.com.au/docs/PostgreSQL_HighAvailability.pdf High Availability and PostgreSQL] by Gavin Sherry&amp;lt;/strike&amp;gt; not available (2012-10-11)&lt;br /&gt;
* [http://www.palominodb.com/blog/2012/08/01/cascade-replication-and-delayed-servers-postgresql-92 Cascade Replication and Delayed servers on PostgreSQL 9.2]&lt;br /&gt;
* [http://prongs.org/blog/postgresql-replication Streaming Replication on PostgreSQL 9.3 by Afra Ahmad]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://burger-ag.de/postgresql_replikation.whtml Replikation - Lösungen für PostgreSQL] page covering this topic in German.  It translates pretty well through [http://babelfish.altavista.com/ Babelfish].&lt;br /&gt;
&lt;br /&gt;
=== Video tutorials ===&lt;br /&gt;
&lt;br /&gt;
* [http://youtu.be/qTPNB0y37EI Alex Alexander presenting Managing Postgres HA using DRBD, Pacemaker and Corosync] youtube video&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
Sources for the initial information on this page include:&lt;br /&gt;
*[http://archives.postgresql.org/pgsql-performance/2007-06/msg00264.php replication thread]&lt;br /&gt;
*[http://archives.postgresql.org/pgsql-general/2007-08/msg00085.php pgpool2 vs sequoia]&lt;br /&gt;
*[http://archives.postgresql.org/pgsql-hackers/2006-10/msg00810.php Postgresql Caching]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Replication]][[Category:Administration]][[Category:Performance]][[Category:Clustering]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=32356</id>
		<title>PostgreSQL Clients</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Clients&amp;diff=32356"/>
		<updated>2018-08-13T15:31:48Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Proprietary software is proprietary even when there isn&amp;#039;t a per-seat license fee at the moment.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a partial list of interactive SQL clients - that doesn&#039;t include reporting engines, ETL data loaders, visual design tools, just interactive clients that you can type SQL in to and get results from them.&lt;br /&gt;
&lt;br /&gt;
== CLI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== psql ====&lt;br /&gt;
&lt;br /&gt;
https://www.postgresql.org/docs/current/static/app-psql.html&lt;br /&gt;
&lt;br /&gt;
The standard command line client, maintained by the postgresql development group and typically distributed as part of the server installation.&lt;br /&gt;
&lt;br /&gt;
==== pgcli ====&lt;br /&gt;
&lt;br /&gt;
https://www.pgcli.com&lt;br /&gt;
&lt;br /&gt;
A command line client with syntax highlighting and pop-up command completion.&lt;br /&gt;
&lt;br /&gt;
==== jaqy ====&lt;br /&gt;
&lt;br /&gt;
https://teradata.github.io/jaqy/&lt;br /&gt;
&lt;br /&gt;
A universal JDBC command line client with lots of features.  It is not specific to PostgreSQL, but it is pre-configured to handle PostgreSQL servers.  Requires PostgreSQL JDBC driver.&lt;br /&gt;
&lt;br /&gt;
== macOS GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Postbird ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLPro for Postgres ====&lt;br /&gt;
&lt;br /&gt;
http://www.macpostgresclient.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
macOS 10.8 and above&lt;br /&gt;
&lt;br /&gt;
100% native OS X app with a clean and simple to use interface. Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
&lt;br /&gt;
==== TablePlus ====&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
A modern, native client for relational databases with nice UI and very convenient query editor. It&#039;s compatible with all versions of Postgres.&lt;br /&gt;
&lt;br /&gt;
==== Postico ====&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
A nice native client by the developers of [http://postgresapp.com Postgres.app]. A free &amp;quot;demo&amp;quot; version of an inexpensive commercial app, but it has very reasonable limits and no time limit.&lt;br /&gt;
&lt;br /&gt;
==== pgEdit ====&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Not a standalone client, rather a plugin for [https://macromates.com Textmate] for using psql.&lt;br /&gt;
&lt;br /&gt;
==== PSequel ====&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
==== SEQUEL for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases.&lt;br /&gt;
&lt;br /&gt;
== Windows GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== DBTools Manager ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines.&lt;br /&gt;
&lt;br /&gt;
==== EMS SQL Manager for PostgreSQL Freeware ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
&lt;br /&gt;
There is a commercial version available with significantly more functionality.&lt;br /&gt;
&lt;br /&gt;
==== Marshal SQL Utility ====&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
==== dbForge Studio for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
dbForge Studio for PostgreSQL is a GUI tool for managing and developing databases and objects. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and UI. The tool provides a data editing tool to customize your queries and property window so that users can view all the required information of PostgreSQL database objects they are interested in.&lt;br /&gt;
&lt;br /&gt;
==== AnySQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
https://www.sqlmaestro.com/products/postgresql/maestro/&lt;br /&gt;
&lt;br /&gt;
Allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
==== Access ====&lt;br /&gt;
&lt;br /&gt;
https://products.office.com/en-us/access&lt;br /&gt;
&lt;br /&gt;
Yes, you can use MS Access as a PostgreSQL database interface. Supports data access to PostgreSQL tables and views; many ODBC-based limitations and errors.&lt;br /&gt;
&lt;br /&gt;
==== VSQL++ for PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpp.com/products/postgresql-management/&lt;br /&gt;
&lt;br /&gt;
A powerful Postgresql database management tool to help DBA sto manage the database objects easy and quickly.&lt;br /&gt;
&lt;br /&gt;
==== Nucleon Database Master ====&lt;br /&gt;
&lt;br /&gt;
http://nucleonsoftware.com/products/database-master&lt;br /&gt;
&lt;br /&gt;
Supports PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite&lt;br /&gt;
&lt;br /&gt;
==== SQLPro ====&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== PGExplorer ====&lt;br /&gt;
&lt;br /&gt;
http://www.PGExplorer.com&lt;br /&gt;
&lt;br /&gt;
Hasn&#039;t been significantly updated in many years, but latest downloads suggest it may support Postgresql 9.* to some extent.&lt;br /&gt;
&lt;br /&gt;
== Linux / Unix GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== Gnome DB ====&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
Has an experimental Windows build available too.&lt;br /&gt;
&lt;br /&gt;
==== Kexi ====&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
A visual database application creator, c.f. Access or FileMaker&lt;br /&gt;
&lt;br /&gt;
== Cross-platform GUI Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 3 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, Linux, FreeBSD, macOS, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
For many years the &amp;quot;standard&amp;quot; freely available GUI client for Postgresql, and so is bundled in many packaged installers. It provides a SQL query tool, an editor for procedural languages and a CRUD interface. It&#039;s also one of the few clients to provide a GUI front end to the plpgsql debugger.&lt;br /&gt;
&lt;br /&gt;
Development has been discontinued by pgadmin.org,  but it is still being maintained by BigSQL who are doing basic maintenance to support current versions of PostgreSQL and packaging it for current OS releases [[https://www.openscg.com/bigsql/pgadmin3/index.jsp/ here]]&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, [https://yum.postgresql.org rpm], Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== LibreOffice Base ====&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/discover/base/&lt;br /&gt;
&lt;br /&gt;
Supports MySQL/MariaDB, Adabas D, MS Access and PostgreSQL, as well as other JDBC/ODBC databases.&lt;br /&gt;
&lt;br /&gt;
==== Tora ====&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux, Windows, macOS&lt;br /&gt;
&lt;br /&gt;
Oracle, MySQL, and PostgreSQL, as well as limited support for ODBC targets. Inspired by the commercial Toad client.&lt;br /&gt;
&lt;br /&gt;
==== SQL Workbench/J ====&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
An OpenSource (though it prohibits usage by government agencies from USA, UK, Canada, China, Russia, North Korea, Syria, Saudi Arabia, Turkey and the Chechen Republic) SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
It has some [http://sql-workbench.net/manual/license.html#license-restrictions restrictions] on use by government employees.&lt;br /&gt;
&lt;br /&gt;
==== Druid III ====&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information.&lt;br /&gt;
&lt;br /&gt;
==== Power*Architect ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
==== DBeaver ====&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
==== pgManage ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/pgManage/pgManage&lt;br /&gt;
&lt;br /&gt;
An alternative to pgAdmin, which runs in both application and server modes.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== Valentina Studio (Free) ====&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool.&lt;br /&gt;
&lt;br /&gt;
There is a commercial version available with additional functionality.&lt;br /&gt;
&lt;br /&gt;
==== RazorSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JetBrains DataGrip ====&lt;br /&gt;
&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multicursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
&lt;br /&gt;
Other JetBrains IDEs have plugins available to provide similar functionality.&lt;br /&gt;
&lt;br /&gt;
==== Aqua Data Studio ====&lt;br /&gt;
&lt;br /&gt;
http://www.aquafold.com/index-postgresql.html&lt;br /&gt;
&lt;br /&gt;
Java: Windows/Linux/macOS/Solaris&lt;br /&gt;
&lt;br /&gt;
Aqua Data Studio is a management tool for the PostgreSQL relational database w/ administration capabilities and a database query tool. The visual administration features provide users the ability to browse and modify database structures, including schema objects, database storage and maintain database security. An integrated query tool allows users to quickly create, edit and execute SQL queries and scripts. Aqua Data Studio also provides an import and export tool to allow users to easily move data in and out of the PostgreSQL database in and from different data formats.&lt;br /&gt;
&lt;br /&gt;
==== Navicat ====&lt;br /&gt;
&lt;br /&gt;
https://www.navicat.com/en/products/navicat-for-postgresql&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, iOS&lt;br /&gt;
&lt;br /&gt;
Navicat is a powerful PostgreSQL Database Server administration and development tool. It works with PostgreSQL 8.0 version or above and supports most of the PostgreSQL features including Trigger, Function, View, Manage User, and so on. It is also not only sophisticated enough for professional developers, but also easy to learn for new users. With its well-designed GUI, Navicat lets you quickly and easily create, organize, access and share information in a secure and easy way.&lt;br /&gt;
&lt;br /&gt;
==== DbVisualizer ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/macOS/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== SQLTool Pro Database Editor ====&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases. JDBC.&lt;br /&gt;
&lt;br /&gt;
== Web Clients ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software ===&lt;br /&gt;
&lt;br /&gt;
==== franchise ====&lt;br /&gt;
&lt;br /&gt;
https://franchise.cloud/&lt;br /&gt;
&lt;br /&gt;
Web client, either hosted (free) or running locally, connects to a local postgresql instance via a small bridge application.&lt;br /&gt;
&lt;br /&gt;
Can share the interface with others, rather like sqlfiddle.com, but accessing your database.&lt;br /&gt;
&lt;br /&gt;
==== pgAdmin 4 ====&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
pgAdmin 4 is a ground-up rewrite of pgAdmin 3. Rather than being a native application it&#039;s primarily a web application that&#039;s also packaged as desktop web shell. At the time of writing it&#039;s considered inferior to pgAdmin 3 both in terms of functionality and stability.&lt;br /&gt;
&lt;br /&gt;
==== TeamPostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
==== Adminer ====&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. A single PHP file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
==== OmniDB ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Django/Python&lt;br /&gt;
&lt;br /&gt;
Open source full-featured web tool for database management. Currently supports PostgreSQL only. More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
==== Tadpole DB Hub ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
==== SIDU ====&lt;br /&gt;
&lt;br /&gt;
http://topnew.net/sidu/&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Schema and data browser and editor.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== JackDB ====&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
A hosted service, so it requires external access to your database.&lt;br /&gt;
&lt;br /&gt;
==== DBHawk ====&lt;br /&gt;
&lt;br /&gt;
https://www.datasparc.com/dbhawk/&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Query editor, report builder, schema and data browser.&lt;br /&gt;
&lt;br /&gt;
==== Datazenit ====&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
Web-based, but available packaged as a desktop app.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== phpPgAdmin ====&lt;br /&gt;
&lt;br /&gt;
http://phppgadmin.sourceforge.net/doku.php&lt;br /&gt;
&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
Similar to phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries.&lt;br /&gt;
&lt;br /&gt;
(last updated 2013, 9.2.x)&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
[[Community Guide to PostgreSQL GUI Tools]] - the source for a lot of this page. Includes many non-client tools, such as bulk loaders, schema diff, schema design, etc.&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development] - from 2009&lt;br /&gt;
&lt;br /&gt;
[[GUI Database Design Tools]] - tools for designing database schemas&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=32355</id>
		<title>Community Guide to PostgreSQL GUI Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Community_Guide_to_PostgreSQL_GUI_Tools&amp;diff=32355"/>
		<updated>2018-08-13T15:10:30Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Proprietary software is proprietary even when there isn&amp;#039;t a per-seat license fee at the moment.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Alternate Guides ==&lt;br /&gt;
&lt;br /&gt;
Another detailed summary from 2009 is available at&lt;br /&gt;
[http://www.postgresonline.com/journal/index.php?/archives/133-Database-Administration,-Reporting,-and-Light-application-development.html Database Administration, Reporting, and Light application development]&lt;br /&gt;
&lt;br /&gt;
== Open Source / Free Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pgAdmin 4 ===&lt;br /&gt;
&lt;br /&gt;
http://www.pgadmin.org/&lt;br /&gt;
&lt;br /&gt;
MS Windows, GNU/Linux, FreeBSD, Mac OS X, OpenBSD, Solaris&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is THE Open Source management tool for your PostgreSQL databases. Features full Unicode support, fast, multithreaded query and data editting tools and support for all PostgreSQL object types.&lt;br /&gt;
&lt;br /&gt;
pgAdmin III is bundled with the Windows installer, and you can use that such a client to administer a remote server on another OS.  Note that binary packages for platforms like RPM don&#039;t show up in every point release, you currently have to go back to v1.8.0 to get the last full set of packages.&lt;br /&gt;
&lt;br /&gt;
Free Administration Centre for the PostgreSQL database. Includes a graphical administration interface, an SQL query tool, a procedural code editor and much more. pgAdmin III is designed to answer the needs of most users, from writing simple SQL queries to developing complex databases. The graphical interface supports all PostgreSQL features and makes administration easy. Available in more than 30 languages and for several operating systems.&lt;br /&gt;
&lt;br /&gt;
=== phpPgAdmin ===&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/phppgadmin&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Similar to the ever-popular phpMyAdmin, enhanced for PostgreSQL, supports browsing and modification of most types of PostgreSQL database objects, plus execution of ad-hoc queries. Maintained by (who else?) the phpPgAdmin team. (JMB 11.2002).&lt;br /&gt;
&lt;br /&gt;
phpPgAdmin (and the required Apache and PHP packages) may be easily installed using Stack Builder if you are running a one-click-installer PostgreSQL distribution.&lt;br /&gt;
&lt;br /&gt;
=== Adminer ===&lt;br /&gt;
&lt;br /&gt;
http://www.adminer.org&lt;br /&gt;
&lt;br /&gt;
browser-based, requires webserver&lt;br /&gt;
&lt;br /&gt;
Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.&lt;br /&gt;
&lt;br /&gt;
=== Libre Office ===&lt;br /&gt;
&lt;br /&gt;
http://www.libreoffice.org/download/3-5-new-features-and-fixes/&lt;br /&gt;
&lt;br /&gt;
New native driver for PostgreSQL databases (for versions &amp;gt; 8.4 - support for version 8.4 will be included in LibreOffice 3.5.1).&lt;br /&gt;
&lt;br /&gt;
=== GNOME-DB ===&lt;br /&gt;
&lt;br /&gt;
http://www.gnome-db.org&lt;br /&gt;
&lt;br /&gt;
Linux, Unix&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Database administration/user tool for GNOME, based on libgda/libgnomedb, which are a complete database-independent access layer for UNIX systems, with support for PostgreSQL, MySQL, Sybase, MS SQL Server, Oracle, Interbase/Firebird, MS Access files, xBase.&lt;br /&gt;
&lt;br /&gt;
=== TOra, an Oracle tool with some PostgreSQL support ===&lt;br /&gt;
&lt;br /&gt;
http://tora.sf.net/&lt;br /&gt;
&lt;br /&gt;
Linux &amp;amp; Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
An Oracle database administration interface, with limited ability to browse PostgreSQL databases (tables, views, and functions only). I&#039;m told that if you have the Oracle libraries, Tora&#039;s sophisticated function editor will work for PostgreSQL as well. Developed by Henrik Johnson as a Quest Toad clone. (JMB 11.2002)&lt;br /&gt;
&lt;br /&gt;
=== Kexi ===&lt;br /&gt;
&lt;br /&gt;
http://www.kexi-project.org/&lt;br /&gt;
&lt;br /&gt;
Kexi is part of the Calligra Suite and is released under the GNU General Public License (GPL) and LGPL.&lt;br /&gt;
&lt;br /&gt;
available for&lt;br /&gt;
FreeBSD &amp;amp; Linux, Apple, Windows, (Android)&lt;br /&gt;
&lt;br /&gt;
=== SQL Workbench/J ===&lt;br /&gt;
&lt;br /&gt;
http://www.sql-workbench.net&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
An OpenSource SQL GUI tool similar to Squirrel. Data can be edited directly in the result set. It has strong support for exporting and importing data between databases using its own SQL command extension. It can be used in GUI mode or as a console application. All SQL Workbench specific commands can also be run in batch mode to automate export and import task. It supports schema comparison (&amp;quot;diff&amp;quot;) and copying data between databases.&lt;br /&gt;
&lt;br /&gt;
=== Druid III ===&lt;br /&gt;
&lt;br /&gt;
http://druid.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information. Once the database is created, the druid can generate:&lt;br /&gt;
&lt;br /&gt;
* HTML documentation: for all tables, with browsing facilities&lt;br /&gt;
* PDF documentation: for all tables&lt;br /&gt;
* Java classes: (one class for each table) that contain tables&#039; constants (such as fields size) plus java code added by the user&lt;br /&gt;
* A data dictionarythat contains all tables and fields present in the database&lt;br /&gt;
* SQL script which contains all table definitions that can be piped to the DBMS&lt;br /&gt;
* And much more info...&lt;br /&gt;
&lt;br /&gt;
=== Power*Architect ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Power*Architect is an ERD modelling tool that is based on Java and JDBC. Support for forward and reverse engineering PostgreSQL databases is supported. It&#039;s OpenSource with a GPL license.&lt;br /&gt;
&lt;br /&gt;
=== RISE PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1889&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PostgreSQL code generator generates native PL/pgSQL scripts. Model your information in the free RISE Editor and generate your database script. The script incrementally updates the tables, columns, indexes and constraints in the database to match the RISE model. Once the database model is updated, the views defined in the RISE model are created in the database and possible default data, entered in the model, is inserted.&lt;br /&gt;
&lt;br /&gt;
=== Open Source CMS ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=2017&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The CMS is a free Visual Studio 2010 solution template with a set of projects providing a complete Content Management System (CMS) based on RISE Visual Modeling with model, full source, sample site and DB-scripts for PostgreSQL, MySQL and SQL Server.&lt;br /&gt;
&lt;br /&gt;
It’s a complete ready-to-run Visual Studio solution with model, source code and web clients. It illustrates how to use RISE, how to implement a SOA backend and how to build RIA frontends.&lt;br /&gt;
&lt;br /&gt;
=== DBeaver ===&lt;br /&gt;
&lt;br /&gt;
http://dbeaver.jkiss.org/&lt;br /&gt;
&lt;br /&gt;
Eclipse/Java (multi-platform)&lt;br /&gt;
&lt;br /&gt;
Eclipse-based environment, supporting many SQL databases from different vendors, as well as few NoSQL ones (Cassandra, etc).&lt;br /&gt;
Good query editor with syntax highlighting, completion and autosave.&lt;br /&gt;
Editing of query results.  SSH tunneling support. Tons of other cool features.&lt;br /&gt;
Quite good, but not 100% perfect PostgreSQL support (yet?). Regularly updated, as of 2018.&lt;br /&gt;
&lt;br /&gt;
=== OmniDB ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/OmniDB/OmniDB&lt;br /&gt;
&lt;br /&gt;
Django/Python (multi-platform), browser-based&lt;br /&gt;
&lt;br /&gt;
Open source full-featured web tool for database management. Currently supports PostgreSQL only. More RDBMS support coming soon, including the ability of converting databases from any supported RDBMS to PostgreSQL and back.&lt;br /&gt;
&lt;br /&gt;
=== Postbird ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/paxa/postbird&lt;br /&gt;
&lt;br /&gt;
MacOs&lt;br /&gt;
&lt;br /&gt;
Open source, desktop application to manage your local or remote PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
=== Sohag Developer ===&lt;br /&gt;
[http://sohag-developer.com/ Sohag Developer]&lt;br /&gt;
&lt;br /&gt;
Gnu/Linux Windows (Other OS can compile from source code).&lt;br /&gt;
&lt;br /&gt;
Build a powerful database applications following few steps using Sohag Developer .&lt;br /&gt;
Sohag Developer currently supports PostgreSQL database and has a set of generators that generates (Qt/C++ code and ui forms - PHP web applications uses web forms and bootstrap framework ) to manipulate the data in the database tables or views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASH-Viewer: PostgreSQL Active Session History Viewer ===&lt;br /&gt;
https://github.com/dbacvetkov/PASH-Viewer&lt;br /&gt;
&lt;br /&gt;
Java (multi-platform).&lt;br /&gt;
&lt;br /&gt;
Open-source software which provides graphical view of active session history and help you to answer questions like &amp;quot;What wait events were taking most time?&amp;quot;, &amp;quot;Which sessions were taking most time?&amp;quot;, &amp;quot;Which queries were taking most time and what were they doing?&amp;quot;. It also supports Active Session History extension by pgsentinel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proprietary ==&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Free GUI tool for managing and developing databases and objects. The IDE for PostgreSQL allows users to create, develop, and execute queries, edit and adjust the code to your requirements in a convenient and user-friendly interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PSequel ===&lt;br /&gt;
&lt;br /&gt;
http://www.psequel.com/&lt;br /&gt;
&lt;br /&gt;
OS X Yosemite only, free, &amp;quot;Sequel Pro&amp;quot; inspired.&lt;br /&gt;
&lt;br /&gt;
=== EMS SQL Manager for PostgreSQL Freeware ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/tools/free&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware (EMS SQL Manager Lite for PostgreSQL) is an excellent and easy-to-use freeware graphical tool for PostgreSQL database administration. It has the minimal required set of tools for those users who are new to PostgreSQL server and need only its basic functionality.&lt;br /&gt;
EMS SQL Manager for PostgreSQL Freeware allows you to work with servers, databases and schemas, view, edit, search, group, sort and filter any data stored in a database, create and execute SQL queries with powerful SQL editor, handle multiple selected objects at a time and much more.&lt;br /&gt;
&lt;br /&gt;
=== Marshal SQL Utility ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1756&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The Marshal SQL Utility is a generic cross database utility with batch execution capabilities. It allows you to test ODBC connections, browse database schemas, discover tables, views and columns.&lt;br /&gt;
&lt;br /&gt;
Key features of Marshal SQL Utility:&lt;br /&gt;
&lt;br /&gt;
* Execute any query supported by your database server&lt;br /&gt;
* Execute batches of queries&lt;br /&gt;
* Discover tables and views in your database&lt;br /&gt;
* Discover columns for a selected table or view&lt;br /&gt;
* Supports BLOBS and CLOBS&lt;br /&gt;
* Save your results to file&lt;br /&gt;
* Use any ODBC compliant database such as PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== RISE PHP for PostgreSQL code generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1888&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
The RISE PHP for PostgreSQL code generator renders PHP source code for database access. Model your information and programming interfaces in the free RISE Editor and generate your code. The generated code implements the classes and methods corresponding to the information interfaces specified in the RISE model. This includes classes for database access and, optionally, classes implementing SOAP/JSON web services and proxy classes assisting the implementation of a PHP SOAP client.&lt;br /&gt;
&lt;br /&gt;
=== RISE - Model Driven Development using ERD / UML ===&lt;br /&gt;
&lt;br /&gt;
http://www.risetobloome.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
RISE is a free software suite for model driven information system development. Use a single source RISE model to generate your entire information solution including database, web services and documentation. Boost development throughput and improve quality and maintainability!&lt;br /&gt;
&lt;br /&gt;
The RISE user experience is based on a project concept, similar to that of most integrated development environments. The user works with resources and drawings that are part of a single development project.&lt;br /&gt;
&lt;br /&gt;
RISE supports a fully graphical approach to information modeling and system engineering, using ERD (Entity Relationship Diagram) as well as UML (Unified Modeling Language). This includes drag-and-drop of entities, their attributes and relations, as well as of views and entire web services.&lt;br /&gt;
&lt;br /&gt;
RISE supports graphic editing of complex objects such as views and orchestrated methods. RISE automatically safeguards the combination process, thus, assuring a technically correct result.&lt;br /&gt;
&lt;br /&gt;
RISE provides several ways to generate code from the model; directly to file, via the RISE Server or as an Internet service. RISE provides code generators for the database layer (SQL/DDL) as well as for the server side application layer (web services and persistent classes). All database scripts are incremental allowing you to install and maintain any number of databases from a single model.&lt;br /&gt;
&lt;br /&gt;
Feature list&lt;br /&gt;
http://www.risetobloome.com/Page_1_S.aspx?ITEM=1355&lt;br /&gt;
&lt;br /&gt;
=== WaveMaker Ajax GUI Design Tool ===&lt;br /&gt;
&lt;br /&gt;
http://www.wavemaker.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Macintosh, Linux&lt;br /&gt;
&lt;br /&gt;
WaveMaker is an Ajax-based GUI design tool for Postgres. WaveMaker is built using itself! WaveMaker generates a standard Java WAR file based on Spring, Hibernate and Dojo. WaveMaker supports Postgres schema creation and import and includes a visual query editor.&lt;br /&gt;
&lt;br /&gt;
=== AnySQL Maestro ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/anysql/maestro/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
AnySQL Maestro is a freeware tool for administering any database engine (PostgreSQL, SQL Server, Oracle, MySQL, MS Access, etc.), which is accessible via ODBC driver or OLE DB provider. Includes Database Designer, Visual Query Builder, BLOB Viewer/Editor, SQL Editor, Data export/import and other features.&lt;br /&gt;
&lt;br /&gt;
=== TeamPostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.teampostgresql.com&lt;br /&gt;
&lt;br /&gt;
browser-based, webserver included&lt;br /&gt;
&lt;br /&gt;
AJAX/JavaScript-powered web interface for PostgreSQL administration. Browse, maintain and create data and database objects from anywhere, in the web browser. Supports SSH for both the web interface and the database connections. Rich interface with tabbed SQL editor with auto-completion, inline row-editing widgets, click-through foreign key navigation between rows and tables, &#039;favorites&#039; management for commonly used scripts, and more.&lt;br /&gt;
&lt;br /&gt;
Installers available for Windows, Mac and Linux, alternatively download a simple cross-platform archive that runs anywhere with simple script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Postgres Compare ===&lt;br /&gt;
&lt;br /&gt;
[[File:Postgres_compare.png|thumb|left|frameless]]&lt;br /&gt;
&lt;br /&gt;
https://www.postgrescompare.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
A comprehensive tool for identifying the differences between databases and generating an update script to synchronize them. Postgres Compare reads the system catalogs to determine the structure of the database and compares it to another to find the changes. Generate SQL and deploy the alterations, save snapshots for later. Automate the process via the command line.&lt;br /&gt;
&lt;br /&gt;
Alpha build available now https://www.postgrescompare.com/downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JetBrains IDEs - DataGrip, IntelliJ IDEA, PHPStorm, PyCharm, RubyMine, etc ...  ===&lt;br /&gt;
&lt;br /&gt;
http://www.jetbrains.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
JetBrains has a dedicated SQL IDE — DataGrip which can connect to PostgreSQL as well. It provides code completion, multi cursors, local query history, navigation, refactorings and language injection support.&lt;br /&gt;
https://www.jetbrains.com/datagrip/&lt;br /&gt;
&lt;br /&gt;
Other JetBrains Products, for example, PHPStorm, have built-in database plugin, and it has the same functionality as DataGrip.&lt;br /&gt;
&lt;br /&gt;
After you configured the data sources of your project, you can easily create tables, foreign keys, indexes much easier than usual, because the IDE is very smart; for example by foreign keys it automatically sets the name of the key and the related columns. For me, it is so far the best experience by creating a basic database schema. Even with editable EER models was it slower...&lt;br /&gt;
By the settings of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://goo.gl/TuqiPR&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;pantun romantis terbaru]&amp;lt;/span&amp;gt; your data source you can configure the SQL dialect of your database. After that, if you want to add stored procedures or triggers, you will have code completion which is favorable too. So I think JetBrains products speed up your work if you exactly know what you want, and how can you make it.&lt;br /&gt;
&lt;br /&gt;
For any JetBrains IDE, there is a free license for open source projects. For enterprise usage there is a 30 days trial, after that, you can buy a personal or commercial license which is very cheap compared to other products.&lt;br /&gt;
&lt;br /&gt;
For PyCharm (even the Community Edition) you can install the free third-party plugin [http://confluence.jetbrains.com/display/CONTEST/Database+Navigator Database Navigator] (Settings -&amp;gt; IDE Settings -&amp;gt; Plugins). It appears to deliver the same functionality described above for PHPStorm. You will get a new menu DB Navigator, left to the Help menu.&lt;br /&gt;
&lt;br /&gt;
=== TablePlus ===&lt;br /&gt;
&lt;br /&gt;
https://tableplus.io/&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
A modern, native tool with an elegant UI that allows you to simultaneously manage multiple databases, including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* True native built.&lt;br /&gt;
&lt;br /&gt;
* Workspace supports multiple tabs, multiple windows&lt;br /&gt;
&lt;br /&gt;
* Powerful SQL editor with full features: auto syntax highlight, auto-suggestion, split pane, favorite and history.&lt;br /&gt;
&lt;br /&gt;
* Data Filter &amp;amp; Sorting, import &amp;amp; export&lt;br /&gt;
&lt;br /&gt;
* Full-dark theme &amp;amp; modern shortcut&lt;br /&gt;
&lt;br /&gt;
With plugin system, you can be able to write your own new features to work with database per your needs (export charts, pretty json…).&lt;br /&gt;
&lt;br /&gt;
=== SQLPro for Postgres ===&lt;br /&gt;
&lt;br /&gt;
http://www.hankinsoft.com/SQLProPostgres&lt;br /&gt;
&lt;br /&gt;
Mac OS X 10.8 and above&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* 100% native OS X app with a clean and simple to use interface.&lt;br /&gt;
* Query editor with syntax highlighting and autocomplete.&lt;br /&gt;
* Support for multiple result set execution.&lt;br /&gt;
* History feature, displaying your last ten executed queries.&lt;br /&gt;
* Primary key detection for inline result set modifications.&lt;br /&gt;
* Custom theme support allowing developers to work with style.&lt;br /&gt;
&lt;br /&gt;
=== Postico ===&lt;br /&gt;
&lt;br /&gt;
https://eggerapps.at/postico/&lt;br /&gt;
&lt;br /&gt;
Mac OS X&lt;br /&gt;
&lt;br /&gt;
Postico is a fully native Mac app for connecting to your PostgreSQL server. It supports encrypted connections via SSL and SSH to PostgreSQL 8.0 and later, including Amazon Redshift.&lt;br /&gt;
&lt;br /&gt;
Postico has a powerful table content editor with in-cell editing and form-based row editing in a sidebar. You can quickly filter tables by keywords or even complex SQL expressions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a table structure editor for editing columns, types, default values, foreign keys, check constraints etc.&lt;br /&gt;
&lt;br /&gt;
Finally, there&#039;s a convenient SQL Query Editor with support for query history and syntax highlighting. It also has convenience features like auto-indent and shortcuts for comment line etc.&lt;br /&gt;
&lt;br /&gt;
=== SEQUEL for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sequel.tech&lt;br /&gt;
&lt;br /&gt;
macOS&lt;br /&gt;
&lt;br /&gt;
SEQUEL for PostgreSQL is a professional DB administration and management tool, with extremely intuitive and feature-rich GUI that makes it the best assistant tool for developers and admins. SEQUEL is lightweight, fast and powerful that it can significantly simplify the DB management process. For those who cannot live without a CLI, SEQUEL offers a powerful Query Editor with syntax highlight, autocomplete and a Console log view that is always visible, so you can monitor the communication with your databases. It includes:&lt;br /&gt;
&lt;br /&gt;
* Database management forms for Schema, Table, Index, Foreign key, Trigger, Rule, Sequence, Collation, Domain, Enum type, Tablespace and Language objects with full parameters support&lt;br /&gt;
* Assistant info views for Object information, Actions, Help, and Documentation&lt;br /&gt;
* Jump bar for quick objects selection and navigation&lt;br /&gt;
* Taskbar with multi-task monitoring support&lt;br /&gt;
* Console log view&lt;br /&gt;
* Syntax highlight, autocomplete, current and selection query execution and explain, line numbering and working statement detection&lt;br /&gt;
* Direct editing in the results view, query results explanation&lt;br /&gt;
* Powerful Field editor&lt;br /&gt;
* Transaction based database updates&lt;br /&gt;
* Code preview and Content editing&lt;br /&gt;
&lt;br /&gt;
=== dbForge Data Compare for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.devart.com/dbforge/postgresql/datacompare/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 2000/XP/2003/Vista and Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Data Compare for PostgreSQL&#039;&#039;&#039; by &#039;&#039;&#039;Devart&#039;&#039;&#039; is a tool for table data comparison and synchronization. When using PostgreSQL data compare tool developer can detect data differences in compared PostgreSQL tables; generate data synchronization script and execute it to eliminate all these differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Identify the differences between two databases&lt;br /&gt;
* Compare separate tables or table groups by table name mask&lt;br /&gt;
* Compare tables with different structure&lt;br /&gt;
* Generate a report embodying data diff and save it for further analysis&lt;br /&gt;
* Sync data in tables and views in full or in part&lt;br /&gt;
* Generate SQL script for database synchronization&lt;br /&gt;
* Organize database synchronization according to the schedule&lt;br /&gt;
&lt;br /&gt;
=== Full Convert ===&lt;br /&gt;
&lt;br /&gt;
https://www.spectralcore.com/fullconvert&lt;br /&gt;
&lt;br /&gt;
Database conversion and synchronization between PostgreSQL and Microsoft Access, dBase, FoxPro, Microsoft Excel, Firebird, Interbase, MySQL, Oracle, Paradox, Microsoft SQL Server, SQL Server, SQL Server Azure, SQL Server Compact(SQLCE), SQLite, Delimited text files (CSV), XML and many more via ODBC.&lt;br /&gt;
&lt;br /&gt;
=== Nucleon Database Master for PostgreSQL and Others ===&lt;br /&gt;
&lt;br /&gt;
Nucleon Database Master is a modern, powerful, intuitive, easy to use and all in one PostgreSQL MongoDB, Oracle, DB2, Informix, Ingres, SQL Server, SQL Azure, MySQL, FireBird, SQLite client application with a consistent interface that simplifies managing, querying, editing, visualizing, designing and &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://mitraharga.blogspot.co.uk/2014/09/harga-tablet-pc-axioo.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;harga tablet axioo]&amp;lt;/span&amp;gt; reporting relational and schema-free (NoSQL) database systems. You can connect any database system via ODBC and OleDB connections.Using Database Master, you can execute SQL, LINQ, JSON queries or you can create, edit and delete all database objects such as tables, views, procedures, columns, indexes, collections, and triggers. You can execute SQL queries and scripts, view and edit table data including BLOBs (Image, Text or any file), represent tables and its relations as an ER(Entity Relationship) diagram.&lt;br /&gt;
&lt;br /&gt;
Info:&lt;br /&gt;
http://www.nucleonsoftware.com/&lt;br /&gt;
Windows, other platforms via WINE&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
=== DBTools Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbtools.com.br&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Freeware, available for PostgreSQL and MySQL, allows managing all aspects of the database: db, table, triggers, functions, etc. Includes import/export wizards to migrate data and structure to/from other database engines. Developed by DBTools Software.&lt;br /&gt;
&lt;br /&gt;
=== PgManager ===&lt;br /&gt;
&lt;br /&gt;
http://www.ems-hitech.com/pgmanager&lt;br /&gt;
&lt;br /&gt;
Windows, Linux version just released&lt;br /&gt;
&lt;br /&gt;
Admin&lt;br /&gt;
&lt;br /&gt;
Basically a proprietary, more powerful version of PGAdmin II or PGAccess. Adds support for trigger and constraint editing, metadata logging, and query monitoring. Also includes multiple-format data import/export tools, which are also available on their own for Linux. Developed by EMS Hitech. (JMB 4.2003).&lt;br /&gt;
&lt;br /&gt;
=== DeZign for Databases ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
DeZign is a database development tool using an entity relationship diagram. It visually supports the layout of the entities and relations and automatically generates SQL schemas for most leading databases including PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Case Studio 2 / Toad Data Modeler ===&lt;br /&gt;
&lt;br /&gt;
http://www.casestudio.com/enu/index.aspx&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
ERD&lt;br /&gt;
&lt;br /&gt;
Commenter 1: I just downloaded the trial version, so far it looks really promising and claims to support PostgreSQL. Handles reverse engineering of existing databases, and has a really nice interface for setting up tables, relationships etc. You can get a lite or full version. The description from the website... Professional database modeling tool for various databases. CASE Studio 2 includes following key features:&lt;br /&gt;
&lt;br /&gt;
LITE version features + Reverse Engineering from various database systems Version Manager Data Flow Diagrams Definition of user-defined variables Large COM interface Users, User groups and User permission support and many more.&lt;br /&gt;
&lt;br /&gt;
Case Studio was acquired, and renamed &#039;Toad Data Modeler&#039;.&lt;br /&gt;
&lt;br /&gt;
Commenter 2: I&#039;ve used the licensed version before and after the name change. PostgreSQL support is excellent.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL PHP Generator ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/phpgenerator/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL PHP Generator is a freeware but powerful PostgreSQL GUI frontend that allows you to generate high-quality PHP scripts for the selected tables, views and queries for the further working with these objects through the web.&lt;br /&gt;
&lt;br /&gt;
=== pgEdit ===&lt;br /&gt;
&lt;br /&gt;
http://pgedit.com&lt;br /&gt;
&lt;br /&gt;
Macintosh&lt;br /&gt;
pgEdit is a high-performance SQL editor and development environment designed specifically for PostgreSQL relational databases. pgEdit features include SQL syntax coloring, direct source code execution, PHP support, integrated documentation, and extensive customizable editing facilities.&lt;br /&gt;
&lt;br /&gt;
pgEdit uses psql, the interactive terminal application included with every PostgreSQL installation. This makes it easy to develop with pgEdit and then transfer your work to any PostgreSQL installation for maintenance and production tasks.&lt;br /&gt;
&lt;br /&gt;
pgEdit is a native application for both Macintosh and Windows. It does not use Java or require installation of external libraries. You have the option of using the version of psql included with pgEdit or a different version installed anywhere on your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== RazorSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.razorsql.com/&lt;br /&gt;
&lt;br /&gt;
Macintosh/Windows/Linux/Solaris&lt;br /&gt;
&lt;br /&gt;
RazorSQL is an SQL query tool, database browser, SQL editor, and database administration tool that supports PostgreSQL and any other JDBC or ODBC compliant database. Some of the major features are tools for creating, dropping, and altering objects such as tables, views, indexes, triggers, functions, users, and databases; a programming editor that supports 20 different programming languages; import and export tools; auto column and table lookup; and a query builder, query scheduler, and SQL formatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MicroOLAP Database Designer ===&lt;br /&gt;
&lt;br /&gt;
http://www.microolap.com/products/database/postgresql-designer/&lt;br /&gt;
&lt;br /&gt;
Windows ODBC&lt;br /&gt;
&lt;br /&gt;
Database Designer for PostgreSQL is an easy CASE tool with an intuitive graphical interface allowing you to build a clear and effective database structure visually, see the complete picture (diagram) representing all the tables, references between them, views, stored procedures and other objects. Then you can easily generate a physical database on a server, modify it according to any changes you made to the diagram using fast ALTER statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import / Export and synchronization tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://convertdb.com/postgresql&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 8 / 7 / Vista / XP / 2000 / NT.&lt;br /&gt;
The software is able to connect to remote PostgreSQL 9.x/7.4 located on Linux, Solaris, Mac OS X, and Windows.&lt;br /&gt;
&lt;br /&gt;
ConvertDB cross-database migration tools assist in data conversion and synchronization among PostgreSQL, MySQL, MS SQL Server, MS Windows SQL Azure,  and MS Access databases&lt;br /&gt;
&lt;br /&gt;
* 1 Million of records can be transferred in 5-10 minutes.&lt;br /&gt;
* Bi-directional synchronization between PostgreSQL, MS SQL, MySQL and Oracle&lt;br /&gt;
* Scheduling migration and synchronization jobs.&lt;br /&gt;
&lt;br /&gt;
=== dbForge Studio for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dbforge/postgresql/studio/&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows 7, 8, 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbForge Studio for PostgreSQL&#039;&#039;&#039; is a brand new tool for PostgreSQL databases development, management, and editing process enjoyable and easy by Devart. The PostgreSQL IDE allows users to create, develop, and execute queries, edit and adjust the code to the requirements in a convenient and UI. The tool provides the PostgreSQL data editor functionality for queries customization and property window for the viewing all the required information of PostgreSQL database objects.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Code Completion helps to improve code quality when creating and editing queries with List Members, Parameter Info, Quick Info, Complete Word.&lt;br /&gt;
* Object Explorer for easy navigation through the object tree. You can retrieve data from the database on a single SQL document, truncate a table, select Properties to view some information on the object.&lt;br /&gt;
* Data Editor for management settings of tables, such as adjust column width, set either paginal or auto-search mode by default. Color and format rows and cells using a rich set of fonts and size. The tool has predefined data type formats to meet your own needs.&lt;br /&gt;
&lt;br /&gt;
=== dotConnect for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/dotconnect/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dotConnect for PostgreSQL&#039;&#039;&#039;, formerly known as PostgreSQLDirect .NET, is an enhanced ORM enabled data provider for PostgreSQL that builds on ADO.NET technology to present a complete solution for developing PostgreSQL-based database applications. It introduces new approaches for designing application architecture, boosts productivity, and leverages database applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key features:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Direct Mode&lt;br /&gt;
* Database Application Development Extension&lt;br /&gt;
* PostgreSQL Advanced Features Support&lt;br /&gt;
* Optimized Code&lt;br /&gt;
* ORM Support&lt;br /&gt;
* BIS Support&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Data Access Components ===&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/pgdac/&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Data Access Components (PgDAC) is a library of components that provides native connectivity to PostgreSQL from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.&lt;br /&gt;
&lt;br /&gt;
Native Connectivity to PostgreSQL&lt;br /&gt;
PgDAC is a complete replacement for standard PostgreSQL connectivity solutions and presents an efficient alternative to the Borland Database Engine (BDE) and standard dbExpress driver for access to PostgreSQL. It provides direct access to PostgreSQL without PostgreSQL Client.&lt;br /&gt;
&lt;br /&gt;
=== ODBC Driver for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/odbc/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart ODBC Driver for PostgreSQL provides high-performance and feature-rich connectivity solution for ODBC-based applications to access PostgreSQL databases from Windows, both 32-bit and 64-bit. Full support for standard ODBC API functions and data types implemented in our driver makes the interaction of your database applications with PostgreSQL fast, easy and extremely handy.&lt;br /&gt;
&lt;br /&gt;
=== Excel Add-in for PostgreSQL  ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/excel-addins/postgresql.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data, and save them back to PostgreSQL. It enables you to work with PostgreSQL data like with usual Excel worksheets, easily perform data cleansing and de-duplication, and apply all the Excel&#039;s powerful data processing and analysis capabilities to these data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EMS Database Management Tools for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmanager.net/en/products/postgresql&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Tools Products Family:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/studio/postgresql SQL Management Studio for PostgreSQL] - a single workbench for administering PostgreSQL databases, managing database schema and objects as well as for database design, migration, extraction, query building, data import, export, and database comparison.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/manager SQL Manager for PostgreSQL] - high performance graphical tool for PostgreSQL database administration and development. It makes creating and editing PostgreSQL database objects easy and fast, and allows you to run SQL scripts, visually design databases, build SQL queries, extract, print and search metadata, import and export PostgreSQL database data and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataexport Data Export for PostgreSQL] - tool to export PostgreSQL database data quickly to any of 19 available formats, including MS Access, MS Excel, MS Word, RTF, HTML, TXT, ODF and more. Data Export for PostgreSQL has a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://aurora-ndut.blogspot.fr/2013/10/kata-kata-lucu.html&amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;kata kata lucu]&amp;lt;/span&amp;gt; friendly wizard, which allows you to set various options of PostgreSQL export process visually and a command-line utility to automate your PostgreSQL export jobs using the configuration file.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dataimport Data Import for PostgreSQL] - tool to import data to PostgreSQL tables from MS Excel 97-2007, MS Access, DBF, TXT, CSV, MS Word 2007, RTF, ODF and HTML files. This utility allows you to quickly import data to one or several PostgreSQL tables or views at once, save all PostgreSQL import parameters set on current wizard session, use special batch insert mode to import PostgreSQL data at the maximum possible speed and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datapump Data Pump for PostgreSQL] - migration tool for converting databases and importing table data from an ADO-compatible source (e.g. MS Access, MS SQL database or any other database with ADO support) to PostgreSQL databases.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datagenerator Data Generator for PostgreSQL] - tool for generating test data to PostgreSQL database tables. The utility can help you to simulate the database production environment and allows you to populate several PostgreSQL database tables with test data simultaneously, define tables for generating data, set value ranges, control a wide variety of generation parameters for each field type and much more.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/dbcomparer DB Comparer for PostgreSQL] - a tool for comparing PostgreSQL database schemas and discovering differences in their structures. You can view all the differences in compared database objects and execute an automatically generated script to synchronize structure of PostgreSQL databases and eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/extract DB Extract for PostgreSQL] - easy-to-use tool for creating PostgreSQL database backups in a form of SQL scripts. This database script utility allows you to save metadata of all PostgreSQL database objects as well as PostgreSQL table data as database snapshots.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/query SQL Query for PostgreSQL] - a useful tool that lets you quickly and simply build SQL queries to PostgreSQL databases. Visual PostgreSQL query building, as well as direct editing of a query text, is available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmanager.net/en/products/postgresql/datacomparer Data Comparer for PostgreSQL] - tool for PostgreSQL data comparison and synchronization. Using this utility you can view all the differences in compared PostgreSQL tables and execute an automatically generated script to eliminate these differences.&lt;br /&gt;
&lt;br /&gt;
=== SQL Maestro Group products for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqlmaestro.com/products/postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlmaestro.com SQL Maestro Group] offers a number of tools for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/maestro/ PostgreSQL Maestro] allows you to create, edit, copy, drop and dump database objects easy and fast. You can also design your database as ER diagram, build queries visually, execute SQL queries and scripts, debug PL/pgSQL functions, view and edit data including BLOBs, represent data as diagrams, export and import data to/from most popular file formats, analyze your data summarized into multidimensional views and hierarchies (OLAP cubes), manage PostgreSQL roles, users, groups and privileges, and use a lot of other admin tools designed for making your work with PostgreSQL database server comfortable and efficient.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datawizard/ PostgreSQL Data Wizard] provides you with a number of easy-to-use wizards to transfer any database to PostgreSQL, export data from PostgreSQL tables, views and queries to most popular formats, and import data from various sources into PostgreSQL tables.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/codefactory/ PostgreSQL Code Factory] is a  GUI tool aimed at the SQL queries and scripts development.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/datasync/ PostgreSQL Data Sync] is a powerful and easy-to-use tool for database contents comparison and synchronization.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlmaestro.com/products/postgresql/phpgenerator/ PostgreSQL PHP Generator Professional] is a frontend that allows you to generate high-quality PHP applications for your database in a few mouse clicks.&lt;br /&gt;
&lt;br /&gt;
SQL Maestro Group also produces similar tools for MySQL, Oracle, MS SQL Server, SQLite, Firebird, DB2, SQL Anywhere, and MaxDB.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic DataDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/datadiff-for-postgresql/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic DataDiff for PostgreSQL is a utility for data comparison and synchronization. Compare data for selected tables in two databases, view differences and publish changes quickly and safely. Flexible comparison and synchronization settings will enable you to set up a customized comparison key and to select tables and fields for comparison and for synchronization.&lt;br /&gt;
DB Data Difftective can be used for data migrations, verification of (corrupt) data, data auditing etc.&lt;br /&gt;
&lt;br /&gt;
=== Datanamic SchemaDiff for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/schemadiff-for-postgresql/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
Datanamic SchemaDiff for PostgreSQL is a tool for comparison and synchronization of database schemas. It allows you to compare and synchronize tables, views, functions, sequences (generators), stored procedures, triggers and constraints between two databases.&lt;br /&gt;
&lt;br /&gt;
=== DB MultiRun PostgreSQL Edition ===&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/multirun/index.html&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
DB MultiRun is a simple tool to execute multiple SQL scripts on multiple databases quickly.&lt;br /&gt;
Define a list of databases, add SQL scripts to execute on these databases and click &amp;quot;execute&amp;quot; to run those scripts on the databases in the list. The multi-threaded execution of the SQL scripts makes it complete the task fast. After execution of the scripts, you can examine the results of the executed scripts on each database.&lt;br /&gt;
&lt;br /&gt;
=== SQLPro ===&lt;br /&gt;
&lt;br /&gt;
http://www.vive.net/products/sqlpro.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SqlPro is an easy to use database GUI tool for six popular databases (Oracle, MySQL, PostgreSQL, SQL Server, SQLite, and Access). One IDE makes database administration and development faster and error free.&lt;br /&gt;
SQLPro Key Features: color-coding of the SQL, drag-and-drop of objects into the editor pane to save you from typing their names, retrieval of SQL code for things like stored procedures and triggers from the underlying database, and one-click creation of SELECT and INSERT statements. You can open, save and print SQL scripts.&lt;br /&gt;
SQLPro uses native drivers to connect to the databases (no ODBS or third party engines to install).&lt;br /&gt;
&lt;br /&gt;
=== DB Doc ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/dbdoc_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows/Linux(Wine)&lt;br /&gt;
&lt;br /&gt;
DB Doc helps you document your database structure and objects.  Documents can be generated as PDF reports, HTML pages, Microsoft Word (docx) file, or a single compiled HTML file.  The layout is fully customizable, and you can quickly view inter-object dependencies using hyperlinks.&lt;br /&gt;
&lt;br /&gt;
DB Doc supports PostgreSQL 8.3 to 9.4.&lt;br /&gt;
&lt;br /&gt;
=== SQL Blob Export ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sbe_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Blob Export exports unlimited images and files from your tables or queries in 5 simple steps.&lt;br /&gt;
&lt;br /&gt;
=== SQL File Import ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sfi_overview.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL File Import allows you to upload files, images, and other data into your database, without having to write any SQL statements.  SQL File Import supports PostgreSQL, Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL).&lt;br /&gt;
&lt;br /&gt;
A scripting engine allows you to transform data before importing them into your database.  A command line version is also included to allow you to perform unattended upload/import tasks.&lt;br /&gt;
&lt;br /&gt;
=== SQL Image Viewer ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/siv_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Image Viewer allows you to retrieve, view, convert and export images stored in Firebird, MySQL, Oracle, SQLite, SQL Server, and various ODBC-supported databases (e.g. DB2 and PostgreSQL). It supports the following image formats: BMP, GIF, JPG, PNG, PSD, and TIFF.&lt;br /&gt;
&lt;br /&gt;
It also allows you to export binary data and recognises the following binary file types: PDF, MP3, WAV, 7Z, BZ2, GZ, RAR, ZIP, and has experimental support for DOC, PPT and XLS file types.&lt;br /&gt;
&lt;br /&gt;
A command line version is also included to allow you to perform unattended scheduled exports of binary data.&lt;br /&gt;
&lt;br /&gt;
=== SQL Multi Select ===&lt;br /&gt;
&lt;br /&gt;
http://www.yohz.com/sms_details.htm&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
SQL Multi Select is a query tool that allows you to run multiple scripts on multiple servers with a single click.  Result sets from different servers are consolidated into a single view, allowing for easy comparison and analysis.&lt;br /&gt;
&lt;br /&gt;
=== SQLTool Pro Database Editor ===&lt;br /&gt;
&lt;br /&gt;
http://www.sqltoolpro.com&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
SQLTool Pro is a professional Android SQL editor for MySQL, SQL Server, PostgreSQL, Sybase, and Oracle Databases.&lt;br /&gt;
&lt;br /&gt;
=== SSIS Data Flow Components for PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
https://www.devart.com/ssis/&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Devart SSIS Data Flow Components for PostgreSQL&#039;&#039;&#039; allow you to integrate database and cloud data via SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
Devart SSIS Data Flow Components provide easy to set up cost-effective data integration using SSIS ETL engine. They provide high performance data loading, convenient component editors, SQL support for cloud data sources and lots of data source specific features.&lt;br /&gt;
&lt;br /&gt;
=== DbVisualizer ===&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com/&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/UNIX&lt;br /&gt;
&lt;br /&gt;
DbVisualizer is a feature rich, intuitive multi-database tool for developers, database administrators, and increasingly for advanced analysts providing a single powerful interface across a wide variety of operating systems. With its easy-to-use and clean interface, DbVisualizer has proven to be one of the most cost effective database tools available, yet to mention that it runs on all major operating systems and supports all major RDBMS that are available. Users only need to learn and master one application. DbVisualizer integrates transparently with the operating system being used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:General articles and guides]]&lt;br /&gt;
&lt;br /&gt;
=== Valentina Studio (Free) ===&lt;br /&gt;
&lt;br /&gt;
http://www.valentina-db.com/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows/OS X/Linux/&lt;br /&gt;
&lt;br /&gt;
Valentina Studio is a powerful PostgreSQL Database Server administration and development tool. It offers for free many advanced editors:&lt;br /&gt;
* Schema Editor with Tree and Column views&lt;br /&gt;
* Diagram Editor with reverse engineering&lt;br /&gt;
* SQL Editor with auto-completion, syntax-highlighting, recent and favorite queries, templates of commands, many result tab-panels, ...&lt;br /&gt;
* Data Editor with easy sorting and filtering of records without SQL, in-cell editing.&lt;br /&gt;
* Related Data Editor that allow s you to learn related records in different modes.&lt;br /&gt;
* Import/Export&lt;br /&gt;
* SQL dumps&lt;br /&gt;
* and so on ...&lt;br /&gt;
&lt;br /&gt;
Valentina Studio PRO - adds additional advanced features as:&lt;br /&gt;
* Report Editor to developer reports based on Valentina Report Engine with datasources from PostgreSQL and other databases.&lt;br /&gt;
* Diagrams forward engineering&lt;br /&gt;
* SQL DIFF&lt;br /&gt;
* Data Transfer&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
&lt;br /&gt;
=== JackDB ===&lt;br /&gt;
&lt;br /&gt;
http://www.jackdb.com/&lt;br /&gt;
&lt;br /&gt;
Html5 Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
JackDB is a database client that runs entirely in your web browser. There&#039;s no software to install locally so you can use it on Mac OS X, Linux, and Windows and it works on all major modern browsers (eg. Chrome, Firefox, IE, Safari, and Opera). It supports connecting to PostgreSQL, as well as MySQL, Oracle, and SQL Server databases.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Html5 interface with no client installation&lt;br /&gt;
* Query editor with syntax highlighting&lt;br /&gt;
* Scrolling result sets&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SSL connections with certificate pinning&lt;br /&gt;
* Eliminates password sharing&lt;br /&gt;
* Two-factor authentication&lt;br /&gt;
* BLOB display (images and Html5 audio/video)&lt;br /&gt;
&lt;br /&gt;
=== Tadpole DB Hub ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/hangum/TadpoleForDBTools/wiki&lt;br /&gt;
&lt;br /&gt;
Tadpole DB Hub is Unified infrastructure tool, a various environment based interface for managing Apache Hive, Amazon RDS, CUBRID, MariaDB, MySQL, Oracle, SQLite, MSSQL, PostgreSQL and MongoDB databases. It enables you to handle typical DB over the World Wide Web.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive web interface (Safari, Chrome, IE 10, Firefox)&lt;br /&gt;
* User Management (Admin, Manager, User)&lt;br /&gt;
* Select, Insert, Update, Delete&lt;br /&gt;
* Download query result&lt;br /&gt;
* SQL Syntax Highlighting&lt;br /&gt;
* SQL Formatting&lt;br /&gt;
* SQL Statement &amp;lt;-&amp;gt; Java, PHP String Literal Each Convert&lt;br /&gt;
* SQL Assist&lt;br /&gt;
* Execute SQL Statement&lt;br /&gt;
* SQL Result Set to CSV&lt;br /&gt;
* SQL History And Export text&lt;br /&gt;
* Generate SQL Statement (Select, Insert, Update, Delete, Table, View, Index, Procedure, Function, Trigger)&lt;br /&gt;
* Generate ER Diagram (Auto Layout)&lt;br /&gt;
&lt;br /&gt;
=== Vertabelo ===&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Vertabelo is an online database designer working under Chrome. It free to use for smaller projects and have a commercial version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Sharing DB model with team members&lt;br /&gt;
* Support for PostgreSQL, MySQL, Oracle, MS SQL Server, DB2, SQLite, HSQLDB,&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Dynamic/Visual search&lt;br /&gt;
* Live model validation&lt;br /&gt;
* Reverse engineering&lt;br /&gt;
&lt;br /&gt;
=== pgModeler ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler&lt;br /&gt;
&lt;br /&gt;
http://pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Database Modeler, or simply, pgModeler is an open source tool for modeling databases that merges the classical concepts of entity-relationship diagrams with specific features that only PostgreSQL implements. The pgModeler translates the models created by the user to SQL code and apply them onto database clusters from version 8.0 to 9.1. $3.50 per copy as of 2014/04/09.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GenMyModel ===&lt;br /&gt;
&lt;br /&gt;
https://www.genmymodel.com&lt;br /&gt;
&lt;br /&gt;
GenMyModel is an online modeling tool supporting [http://www.genmymodel.com/database-diagram-online database modeling]. It is free to use for smaller projects and have a commercial version for larger database projects.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Intuitive HTML5 web interface (Chrome, Firefox, Safari, Internet Explorer)&lt;br /&gt;
* OS independent&lt;br /&gt;
* Instant sharing and collaboration&lt;br /&gt;
* Customizable SQL generators&lt;br /&gt;
* Model versioning&lt;br /&gt;
* Live model validation&lt;br /&gt;
&lt;br /&gt;
=== DBHawk ===&lt;br /&gt;
&lt;br /&gt;
http://www.datasparc.com/&lt;br /&gt;
&lt;br /&gt;
Web Browser (Linux/Mac OS X/Windows)&lt;br /&gt;
&lt;br /&gt;
DBHawk is a web based SQL tool and reporting software designed for PostgreSQL, Oracle, SQL Server and other databases. Its easy to deploy and use.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Web based interface with no client installation&lt;br /&gt;
* Advanced Query editor with syntax highlighting and multi tabs results&lt;br /&gt;
* Online visual query builder&lt;br /&gt;
* Online SQL Report Builder&lt;br /&gt;
* Online SQL Job Scheduler&lt;br /&gt;
* Export results to html, csv, pdf, google docs, amazon s3&lt;br /&gt;
* SQL Auditing and Security&lt;br /&gt;
* Schema/Object browser&lt;br /&gt;
* SQL and data snippet sharing&lt;br /&gt;
* Blob data viewer and editor&lt;br /&gt;
&lt;br /&gt;
=== Datazenit ===&lt;br /&gt;
&lt;br /&gt;
https://datazenit.com/&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Datazenit is a cross-platform PostgreSQL and MySQL GUI with data grid, schema builder and interactive charts.&lt;br /&gt;
It also has query builder, raw query editor with auto-complete, team collaboration features like connection, query and chart sharing among team members.&lt;br /&gt;
&lt;br /&gt;
=== EDB Postgres Enterprise Manager ===&lt;br /&gt;
&lt;br /&gt;
http://www.enterprisedb.com/products/postgres-enterprise-manager&lt;br /&gt;
&lt;br /&gt;
Windows, Mac OS X, Linux&lt;br /&gt;
&lt;br /&gt;
Postgres Enterprise Manager is the only solution available today that allows you to intelligently manage, monitor, and tune large scale Postgres installations from a single GUI console.&lt;br /&gt;
&lt;br /&gt;
Monitoring features include: server auto-discovery, over 225 pre-configured ready to run probes, custom probes, alert management, personalized alerts, remote monitoring, versatile charting, custom dashboards and web client.&lt;br /&gt;
&lt;br /&gt;
DBA tools include: database objects management, Postgres Expert (best practice configuration settings), Audit Manager, Log Manager, Log Analysis Expert, Capacity Manager and Team Support.&lt;br /&gt;
&lt;br /&gt;
Developer tools include: Query Tool, Data Grid, SQL Profiler, SQL Debugger and Import tools.&lt;br /&gt;
&lt;br /&gt;
Tuning tools include: At-A-Glance performance dashboards, Tuning Wizard, Performance Diagnostics and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
=== ClusterControl by Severalnines ===&lt;br /&gt;
&lt;br /&gt;
https://severalnines.com/product/clustercontrol/for_postgresql&lt;br /&gt;
&lt;br /&gt;
ClusterControl is an all-inclusive open source database management system that allows you to deplore, monitor, manage and scale your database environments. ClusterControl provides the basic functionality you need to get PostgreSQL up-and-running using our deployment wizard, monitoring and basic management abilities like automatic failover, backups, and restores.&lt;br /&gt;
&lt;br /&gt;
* Point and Click Replication Deployments - ClusterControl allows you to easily deploy and configure master/slave replication PostgreSQL instances.&lt;br /&gt;
* Advanced Performance Monitoring - ClusterControl monitors queries and detects anomalies with built-in alerts.&lt;br /&gt;
* Automated Failover Handling - ClusterControl detects master failures and automatically promotes a new master&lt;br /&gt;
* Database Automation - ClusterControl lets you manage configurations, schedule, and restore backups.&lt;br /&gt;
&lt;br /&gt;
== No longer Supported/Developed ==&lt;br /&gt;
&lt;br /&gt;
* OpenOffice postgresql SDBC Driver. no work on the project since 2010;  last version was a beta. http://www.openoffice.org/dba/drivers/postgresql/index.html&lt;br /&gt;
* RedHat:  hasn&#039;t been refreshed since Pg 8.4. http://sources.redhat.com/rhdb&lt;br /&gt;
* SQuirrel:  website 404.  http://squirrel-sql.sourceforge.net/&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=32238</id>
		<title>Don&#039;t Do This</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=32238"/>
		<updated>2018-07-19T05:44:11Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* When should you? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short list of common mistakes.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use psql -W or --password ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;tt&amp;gt;psql -W&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;psql --password&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Using the --password or -W flags will tell [https://www.postgresql.org/docs/current/static/reference-client.html psql] to prompt you for a password, before trying to connect to the server - so you&#039;ll be prompted for a password even if the server doesn&#039;t require one.&lt;br /&gt;
&lt;br /&gt;
It&#039;s never required, as if the server does require a password psql will prompt you for one, and it can be very confusing when setting up permissions. If you&#039;re connecting with -W to a server configured to allow you access via &amp;lt;tt&amp;gt;peer&amp;lt;/tt&amp;gt; authentication you may think that it&#039;s requiring a password when it really isn&#039;t. And if the user you&#039;re logging in as doesn&#039;t have a password set or you enter the wrong password at the prompt you&#039;ll still be logged in and think you have the right password - but you won&#039;t be able to log in from other clients (that connect via localhost) or when logged in as other users.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never, pretty much. It will save a round trip to the server but that&#039;s about it.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use NOT IN ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt;, or any combination of &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; such as &amp;lt;code&amp;gt;NOT (x IN (select...))&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Two reasons:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt; behaves in unexpected ways if there is a null present:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (1,null); -- always returns 0 rows&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (select x from bar);&lt;br /&gt;
   -- returns 0 rows if any value of bar.x is null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because &amp;lt;code&amp;gt;col IN (1,null)&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; if col=1, and &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; otherwise (i.e. it can never return &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;). Since &amp;lt;code&amp;gt;NOT (TRUE)&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;, but &amp;lt;code&amp;gt;NOT (NULL)&amp;lt;/code&amp;gt; is still &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;, there is no way that &amp;lt;code&amp;gt;NOT (col IN (1,null))&amp;lt;/code&amp;gt; (which is the same thing as &amp;lt;code&amp;gt;col NOT IN (1,null)&amp;lt;/code&amp;gt;) can return &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; under any circumstances.&lt;br /&gt;
&lt;br /&gt;
2. Because of point 1 above, &amp;lt;code&amp;gt;NOT IN (SELECT ...)&amp;lt;/code&amp;gt; does not optimize very well. In particular, the planner can&#039;t transform it into an anti-join, and so it becomes either a hashed Subplan or a plain Subplan. The hashed subplan is fast, but the planner only allows that plan for small result sets; the plain subplan is &#039;&#039;&#039;horrifically&#039;&#039;&#039; slow (in fact O(N²)). This means that the performance can look good in small-scale tests but then slow down by 5 or more orders of magnitude once a size threshold is crossed; you &#039;&#039;&#039;do not&#039;&#039;&#039; want this to happen.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NOT IN (&amp;lt;i&amp;gt;list,of,values,...&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; is mostly safe &#039;&#039;unless&#039;&#039; you might have a null in the list (via a parameter or otherwise). So it&#039;s sometimes natural and even advisable to use it when excluding specific constant values from a query result.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; type to store timestamps, use &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp with time zone&amp;lt;/tt&amp;gt;) instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; records a single moment in time. Despite what the name says it doesn&#039;t store a timestamp, just a point in time described as the number of microseconds since January 1st, 2000 in UTC. You can insert values in any timezone and it&#039;ll store the point in time that value describes. By default it will display times in your current timezone, but you can use &amp;lt;tt&amp;gt;at time zone&amp;lt;/tt&amp;gt; to display it in other time zones.&lt;br /&gt;
&lt;br /&gt;
Because it stores a point in time it will do the right thing with arithmetic involving timestamps entered in different timezones - including between timestamps from the same location on different sides of a daylight savings time change.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp without time zone&amp;lt;/tt&amp;gt;) doesn&#039;t do any of that, it just stores a date and time you give it. You can think of it being a picture of a calendar and a clock rather than a point in time. Without additional information - the timezone - you don&#039;t know what time it records. Because of that, arithmetic between timestamps from different locations or between timestamps from summer and winter may give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
So if what you want to store is a point in time, rather than a picture of a clock, use timestamptz.&lt;br /&gt;
&lt;br /&gt;
[https://it.toolbox.com/blogs/josh-berkus/zone-of-misunderstanding-092811 More about timestamptz].&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re dealing with timestamps in an abstract way, or just saving and retrieving them from an app, where you aren&#039;t going to be doing arithmetic with them then timestamp might be suitable.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use money ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;money&amp;lt;/tt&amp;gt; data type isn&#039;t actually very good for storing monetary values. Numeric, or (rarely) integer may be better.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/message-id/flat/20130328092819.237c0106@imp#20130328092819.237c0106@imp lots of reasons.]&lt;br /&gt;
&lt;br /&gt;
It&#039;s a fixed-point type, implemented as a machine int, so arithmetic with it is fast. But it doesn&#039;t handle fractions of a cent (or equivalents in other currencies), it&#039;s rounding behaviour is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t store a currency with the value, rather assuming that all money columns contain the currency specified by the database&#039;s [https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-LC-MONETARY lc_monetary] locale setting. If you change the lc_monetary setting for any reason, all money columns will contain the wrong value. That means that if you insert &#039;$10.00&#039; while lc_monetary is set to &#039;en_US.UTF-8&#039; the value you retrieve may be &#039;10,00 Lei&#039; or &#039;¥1,000&#039; if lc_monetary is changed.&lt;br /&gt;
&lt;br /&gt;
Storing a value as a numeric, possibly with the currency being used in an adjacent column, might be better.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re only working in a single currency, aren&#039;t dealing with fractional cents and are only doing addition and subtraction then money might be the right thing.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timetz ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timetz&amp;lt;/tt&amp;gt; type. You probably want &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Even the manual tells you it&#039;s only implemented for SQL compliance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The type time with time zone is defined by the SQL standard, but the definition exhibits properties which lead to questionable usefulness. In most cases, a combination of date, time, timestamp without time zone, and timestamp with time zone should provide a complete range of date/time functionality required by any application.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use upper case table or column names ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use NamesLikeThis, use names_like_this.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds all names - of tables, columns, functions and everything else - to lower case unless they&#039;re &amp;quot;double quoted&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So &amp;lt;tt&amp;gt;create table Foo()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;foo&amp;lt;/tt&amp;gt;, while &amp;lt;tt&amp;gt;create table &amp;quot;Bar&amp;quot;()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;Bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These select commands will work: &amp;lt;tt&amp;gt;select * from Foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from &amp;quot;Bar&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These will fail with &amp;quot;no such table&amp;quot;: &amp;lt;tt&amp;gt;select * from &amp;quot;Foo&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from Bar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This means that if you use uppercase characters in your table or column names you have to either &#039;&#039;always&#039;&#039; double quote them or &#039;&#039;never&#039;&#039; double quote them. That&#039;s annoying enough by hand, but when you start using other tools to access the database, some of which always quote all names and some don&#039;t, it gets very confusing.&lt;br /&gt;
&lt;br /&gt;
Stick to using a-z, 0-9 and underscore for names and you never have to worry about quoting them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If it&#039;s important that &amp;quot;pretty&amp;quot; names are displaying in report output then you might want to use them. But you can also use column aliases to use lower case names in a table and still get pretty names in the output of a query: &amp;lt;tt&amp;gt;select character_name as &amp;quot;Character Name&amp;quot; from foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use char(n) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;char(n)&amp;lt;/tt&amp;gt;. You probably want &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
char(n) is a fixed width type, and any string you insert into it will be padded with spaces to that fixed width. That&#039;s probably not what you actually want.&lt;br /&gt;
&lt;br /&gt;
The manual says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Values of type character are physically padded with spaces to the specified width n, and are stored and displayed that way. However, trailing spaces are treated as semantically insignificant and disregarded when comparing two values of type character. In collations where whitespace is significant, this behavior can produce unexpected results; for example SELECT &#039;a &#039;::CHAR(2) collate &amp;quot;C&amp;quot; &amp;lt; E&#039;a\n&#039;::CHAR(2) returns true, even though C locale would consider a space to be greater than a newline. Trailing spaces are removed when converting a character value to one of the other string types. Note that trailing spaces are semantically significant in character varying and text values, and when using pattern matching, that is LIKE and regular expressions.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should scare you off it.&lt;br /&gt;
&lt;br /&gt;
It being a fixed width type does waste space, but doesn&#039;t make operations on it any faster.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re porting very, very old software that uses fixed width fields. Or when you read the snippet from the manual above and think &amp;quot;yes, that makes perfect sense and is a good match for my requirements&amp;quot; rather than gibbering and running away.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use varchar(n) by default ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; by default. Consider &amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the length limit) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; is a variable width text field that will throw an error if you try and insert a string longer than n characters (not bytes) into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the &amp;lt;tt&amp;gt;(n)&amp;lt;/tt&amp;gt;) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; are similar, but without the length limit. If you insert the same string into the three field types they will take up exactly the same amount of space, and you won&#039;t be able to measure any difference in performance.&lt;br /&gt;
&lt;br /&gt;
If what you really need is a text field with an length limit then varchar(n) is great, but if you pick an arbitrary length and choose varchar(20) for a surname field you&#039;re risking production errors in the future when Hubert Blaine Wolfe­schlegel­stein­hausen­berger­dorff signs up for your service.&lt;br /&gt;
&lt;br /&gt;
Some databases don&#039;t have a type that can hold arbitrary long text, or if they do it&#039;s not as convenient or efficient or well-supported as varchar(n). Users from those databases will often use something like &amp;lt;tt&amp;gt;varchar(255)&amp;lt;/tt&amp;gt; when what they really want is &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you need to constrain the value in a field you probably need something more specific than a maximum length - maybe a minimum length too, or a limited set of characters - and a [https://www.postgresql.org/docs/current/static/ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS check constraint] can do all of those things as well as a maximum string length.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you want to, really. If what you want is a text field that will throw an error if you insert too long a string into it, and you don&#039;t want to use an explicit check constraint then varchar(n) is a perfectly good type. Just don&#039;t use it automatically without thinking about it.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use rules ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use [https://www.postgresql.org/docs/current/static/sql-createrule.html rules]. If you think you want to, use a [https://www.postgresql.org/docs/current/static/plpgsql-trigger.html trigger] instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Rules are incredibly powerful, but they don&#039;t do what they look like they do. They look like they&#039;re some conditional logic, but they actually rewrite a query to modify it or add additional queries to it.&lt;br /&gt;
&lt;br /&gt;
That means that [http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/ all non-trivial rules are incorrect].&lt;br /&gt;
&lt;br /&gt;
Depesz has [https://www.depesz.com/2010/06/15/to-rule-or-not-to-rule-that-is-the-question/ more to say] about them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never. While the rewriter is an implementation detail of VIEWs, there is no reason to pry up this cover plate directly.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use BETWEEN (especially with timestamps) ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; uses a closed-interval comparison: the values of both ends of the specified range are included in the result.&lt;br /&gt;
&lt;br /&gt;
This is a particular problem with queries of the form&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol BETWEEN &#039;2018-06-01&#039; AND &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will include results where the timestamp is &#039;&#039;exactly&#039;&#039; 2018-06-08 00:00:00.000000, but not timestamps later in that same day. So the query might seem to work, but as soon as you get an entry exactly on midnight, you&#039;ll end up double-counting it.&lt;br /&gt;
&lt;br /&gt;
Instead, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol &amp;gt;= &#039;2018-06-01&#039; AND timestampcol &amp;lt; &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; is safe for discrete quantities like integers or dates, as long as you remember that both ends of the range are included in the result. But it&#039;s a bad habit to get into.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=32237</id>
		<title>Don&#039;t Do This</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Don%27t_Do_This&amp;diff=32237"/>
		<updated>2018-07-19T05:41:15Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: Reverted edits by Elein (talk) to last revision by Rhodiumtoad&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short list of common mistakes.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use psql -W or --password ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;tt&amp;gt;psql -W&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;psql --password&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Using the --password or -W flags will tell [https://www.postgresql.org/docs/current/static/reference-client.html psql] to prompt you for a password, before trying to connect to the server - so you&#039;ll be prompted for a password even if the server doesn&#039;t require one.&lt;br /&gt;
&lt;br /&gt;
It&#039;s never required, as if the server does require a password psql will prompt you for one, and it can be very confusing when setting up permissions. If you&#039;re connecting with -W to a server configured to allow you access via &amp;lt;tt&amp;gt;peer&amp;lt;/tt&amp;gt; authentication you may think that it&#039;s requiring a password when it really isn&#039;t. And if the user you&#039;re logging in as doesn&#039;t have a password set or you enter the wrong password at the prompt you&#039;ll still be logged in and think you have the right password - but you won&#039;t be able to log in from other clients (that connect via localhost) or when logged in as other users.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never, pretty much. It will save a round trip to the server but that&#039;s about it.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use NOT IN ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt;, or any combination of &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; such as &amp;lt;code&amp;gt;NOT (x IN (select...))&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Two reasons:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;code&amp;gt;NOT IN&amp;lt;/code&amp;gt; behaves in unexpected ways if there is a null present:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (1,null); -- always returns 0 rows&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;select * from foo where col not in (select x from bar);&lt;br /&gt;
   -- returns 0 rows if any value of bar.x is null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because &amp;lt;code&amp;gt;col IN (1,null)&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; if col=1, and &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; otherwise (i.e. it can never return &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;). Since &amp;lt;code&amp;gt;NOT (TRUE)&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;, but &amp;lt;code&amp;gt;NOT (NULL)&amp;lt;/code&amp;gt; is still &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;, there is no way that &amp;lt;code&amp;gt;NOT (col IN (1,null))&amp;lt;/code&amp;gt; (which is the same thing as &amp;lt;code&amp;gt;col NOT IN (1,null)&amp;lt;/code&amp;gt;) can return &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; under any circumstances.&lt;br /&gt;
&lt;br /&gt;
2. Because of point 1 above, &amp;lt;code&amp;gt;NOT IN (SELECT ...)&amp;lt;/code&amp;gt; does not optimize very well. In particular, the planner can&#039;t transform it into an anti-join, and so it becomes either a hashed Subplan or a plain Subplan. The hashed subplan is fast, but the planner only allows that plan for small result sets; the plain subplan is &#039;&#039;&#039;horrifically&#039;&#039;&#039; slow (in fact O(N²)). This means that the performance can look good in small-scale tests but then slow down by 5 or more orders of magnitude once a size threshold is crossed; you &#039;&#039;&#039;do not&#039;&#039;&#039; want this to happen.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NOT IN (&amp;lt;i&amp;gt;list,of,values,...&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; is mostly safe &#039;&#039;unless&#039;&#039; you might have a null in the list (via a parameter or otherwise). So it&#039;s sometimes natural and even advisable to use it when excluding specific constant values from a query result.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timestamp (without time zone) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; type to store timestamps, use &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp with time zone&amp;lt;/tt&amp;gt;) instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; records a single moment in time. Despite what the name says it doesn&#039;t store a timestamp, just a point in time described as the number of microseconds since January 1st, 2000 in UTC. You can insert values in any timezone and it&#039;ll store the point in time that value describes. By default it will display times in your current timezone, but you can use &amp;lt;tt&amp;gt;at time zone&amp;lt;/tt&amp;gt; to display it in other time zones.&lt;br /&gt;
&lt;br /&gt;
Because it stores a point in time it will do the right thing with arithmetic involving timestamps entered in different timezones - including between timestamps from the same location on different sides of a daylight savings time change.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;timestamp&amp;lt;/tt&amp;gt; (also known as &amp;lt;tt&amp;gt;timestamp without time zone&amp;lt;/tt&amp;gt;) doesn&#039;t do any of that, it just stores a date and time you give it. You can think of it being a picture of a calendar and a clock rather than a point in time. Without additional information - the timezone - you don&#039;t know what time it records. Because of that, arithmetic between timestamps from different locations or between timestamps from summer and winter may give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
So if what you want to store is a point in time, rather than a picture of a clock, use timestamptz.&lt;br /&gt;
&lt;br /&gt;
[https://it.toolbox.com/blogs/josh-berkus/zone-of-misunderstanding-092811 More about timestamptz].&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re dealing with timestamps in an abstract way, or just saving and retrieving them from an app, where you aren&#039;t going to be doing arithmetic with them then timestamp might be suitable.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use money ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;money&amp;lt;/tt&amp;gt; data type isn&#039;t actually very good for storing monetary values. Numeric, or (rarely) integer may be better.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
[https://www.postgresql.org/message-id/flat/20130328092819.237c0106@imp#20130328092819.237c0106@imp lots of reasons.]&lt;br /&gt;
&lt;br /&gt;
It&#039;s a fixed-point type, implemented as a machine int, so arithmetic with it is fast. But it doesn&#039;t handle fractions of a cent (or equivalents in other currencies), it&#039;s rounding behaviour is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t store a currency with the value, rather assuming that all money columns contain the currency specified by the database&#039;s [https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-LC-MONETARY lc_monetary] locale setting. If you change the lc_monetary setting for any reason, all money columns will contain the wrong value. That means that if you insert &#039;$10.00&#039; while lc_monetary is set to &#039;en_US.UTF-8&#039; the value you retrieve may be &#039;10,00 Lei&#039; or &#039;¥1,000&#039; if lc_monetary is changed.&lt;br /&gt;
&lt;br /&gt;
Storing a value as a numeric, possibly with the currency being used in an adjacent column, might be better.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re only working in a single currency, aren&#039;t dealing with fractional cents and are only doing addition and subtraction then money might be the right thing.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use timetz ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the &amp;lt;tt&amp;gt;timetz&amp;lt;/tt&amp;gt; type. You probably want &amp;lt;tt&amp;gt;timestamptz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Even the manual tells you it&#039;s only implemented for SQL compliance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The type time with time zone is defined by the SQL standard, but the definition exhibits properties which lead to questionable usefulness. In most cases, a combination of date, time, timestamp without time zone, and timestamp with time zone should provide a complete range of date/time functionality required by any application.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Never.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use upper case table or column names ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use NamesLikeThis, use names_like_this.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL folds all names - of tables, columns, functions and everything else - to lower case unless they&#039;re &amp;quot;double quoted&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So &amp;lt;tt&amp;gt;create table Foo()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;foo&amp;lt;/tt&amp;gt;, while &amp;lt;tt&amp;gt;create table &amp;quot;Bar&amp;quot;()&amp;lt;/tt&amp;gt; will create a table called &amp;lt;tt&amp;gt;Bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These select commands will work: &amp;lt;tt&amp;gt;select * from Foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from foo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from &amp;quot;Bar&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These will fail with &amp;quot;no such table&amp;quot;: &amp;lt;tt&amp;gt;select * from &amp;quot;Foo&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from Bar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;select * from bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This means that if you use uppercase characters in your table or column names you have to either &#039;&#039;always&#039;&#039; double quote them or &#039;&#039;never&#039;&#039; double quote them. That&#039;s annoying enough by hand, but when you start using other tools to access the database, some of which always quote all names and some don&#039;t, it gets very confusing.&lt;br /&gt;
&lt;br /&gt;
Stick to using a-z, 0-9 and underscore for names and you never have to worry about quoting them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
If it&#039;s important that &amp;quot;pretty&amp;quot; names are displaying in report output then you might want to use them. But you can also use column aliases to use lower case names in a table and still get pretty names in the output of a query: &amp;lt;tt&amp;gt;select character_name as &amp;quot;Character Name&amp;quot; from foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use char(n) ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;char(n)&amp;lt;/tt&amp;gt;. You probably want &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
char(n) is a fixed width type, and any string you insert into it will be padded with spaces to that fixed width. That&#039;s probably not what you actually want.&lt;br /&gt;
&lt;br /&gt;
The manual says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Values of type character are physically padded with spaces to the specified width n, and are stored and displayed that way. However, trailing spaces are treated as semantically insignificant and disregarded when comparing two values of type character. In collations where whitespace is significant, this behavior can produce unexpected results; for example SELECT &#039;a &#039;::CHAR(2) collate &amp;quot;C&amp;quot; &amp;lt; E&#039;a\n&#039;::CHAR(2) returns true, even though C locale would consider a space to be greater than a newline. Trailing spaces are removed when converting a character value to one of the other string types. Note that trailing spaces are semantically significant in character varying and text values, and when using pattern matching, that is LIKE and regular expressions.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should scare you off it.&lt;br /&gt;
&lt;br /&gt;
It being a fixed width type does waste space, but doesn&#039;t make operations on it any faster.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re porting very, very old software that uses fixed width fields. Or when you read the snippet from the manual above and think &amp;quot;yes, that makes perfect sense and is a good match for my requirements&amp;quot; rather than gibbering and running away.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use varchar(n) by default ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use the type &amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; by default. Consider &amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the length limit) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar(n)&amp;lt;/tt&amp;gt; is a variable width text field that will throw an error if you try and insert a string longer than n characters (not bytes) into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;varchar&amp;lt;/tt&amp;gt; (without the &amp;lt;tt&amp;gt;(n)&amp;lt;/tt&amp;gt;) or &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; are similar, but without the length limit. If you insert the same string into the three field types they will take up exactly the same amount of space, and you won&#039;t be able to measure any difference in performance.&lt;br /&gt;
&lt;br /&gt;
If what you really need is a text field with an length limit then varchar(n) is great, but if you pick an arbitrary length and choose varchar(20) for a surname field you&#039;re risking production errors in the future when Hubert Blaine Wolfe­schlegel­stein­hausen­berger­dorff signs up for your service.&lt;br /&gt;
&lt;br /&gt;
Some databases don&#039;t have a type that can hold arbitrary long text, or if they do it&#039;s not as convenient or efficient or well-supported as varchar(n). Users from those databases will often use something like &amp;lt;tt&amp;gt;varchar(255)&amp;lt;/tt&amp;gt; when what they really want is &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you need to constrain the value in a field you probably need something more specific than a maximum length - maybe a minimum length too, or a limited set of characters - and a [https://www.postgresql.org/docs/current/static/ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS check constraint] can do all of those things as well as a maximum string length.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
When you want to, really. If what you want is a text field that will throw an error if you insert too long a string into it, and you don&#039;t want to use an explicit check constraint then varchar(n) is a perfectly good type. Just don&#039;t use it automatically without thinking about it.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use rules ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use [https://www.postgresql.org/docs/current/static/sql-createrule.html rules]. If you think you want to, use a [https://www.postgresql.org/docs/current/static/plpgsql-trigger.html trigger] instead.&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
Rules are incredibly powerful, but they don&#039;t do what they look like they do. They look like they&#039;re some conditional logic, but they actually rewrite a query to modify it or add additional queries to it.&lt;br /&gt;
&lt;br /&gt;
That means that [http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/ all non-trivial rules are incorrect].&lt;br /&gt;
&lt;br /&gt;
Depesz has [https://www.depesz.com/2010/06/15/to-rule-or-not-to-rule-that-is-the-question/ more to say] about them.&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
Probably never. If you&#039;re doing something like &amp;quot;ON SELECT DO INSTEAD SELECT&amp;quot; you can probably use a view instead.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t use BETWEEN (especially with timestamps) ==&lt;br /&gt;
&lt;br /&gt;
=== Why not? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; uses a closed-interval comparison: the values of both ends of the specified range are included in the result.&lt;br /&gt;
&lt;br /&gt;
This is a particular problem with queries of the form&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol BETWEEN &#039;2018-06-01&#039; AND &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will include results where the timestamp is &#039;&#039;exactly&#039;&#039; 2018-06-08 00:00:00.000000, but not timestamps later in that same day. So the query might seem to work, but as soon as you get an entry exactly on midnight, you&#039;ll end up double-counting it.&lt;br /&gt;
&lt;br /&gt;
Instead, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM blah WHERE timestampcol &amp;gt;= &#039;2018-06-01&#039; AND timestampcol &amp;lt; &#039;2018-06-08&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When should you? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt; is safe for discrete quantities like integers or dates, as long as you remember that both ends of the range are included in the result. But it&#039;s a bad habit to get into.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_11_Open_Items&amp;diff=31923</id>
		<title>PostgreSQL 11 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_11_Open_Items&amp;diff=31923"/>
		<updated>2018-05-08T23:54:44Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* Important Dates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/d8ja7ubjnyp.fsf@dalvik.ping.uio.no JSONB PL/Perl transform bugs]&lt;br /&gt;
&lt;br /&gt;
* [http://postgr.es/m/86137f17-1dfb-42f9-7421-82fd786b04a1@anayrat.info Explain buffers wrong counter with parallel plans]&lt;br /&gt;
** reported as a possible defect in commit 01edb5c7fc3bcf6aea15f2b3be36189b52ad9d1a&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkOKptQiE51Bh4_xeEHhaBwHkZkGtKizrFMgEkfUuRRQg%40mail.gmail.com Local partitioned indexes and pageinspect]&lt;br /&gt;
&lt;br /&gt;
* [http://postgr.es/m/877eovbjc3.fsf@news-spur.riddles.org.uk breakage calling a procedure with a toasted parameter]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ff8f9bfa485ff961d6bb43e54120485b@postgrespro.ru Crash with partition pruning with handling of ArrayCoerceExpr]&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180328212751.eskdxpljte6ga6wu@alap3.anarazel.de reconsider jit=on default shortly before release]&lt;br /&gt;
&lt;br /&gt;
== Older Bugs ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20153.1523471686%40sss.pgh.pa.us IsInParallelMode() check in set_config_option is wrong (was: WARNING in parallel index creation)]&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180309075538.GD9376@paquier.xyz Fixes for missing schema qualifications]&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAFiTN-u4BA8KXcQUWDPNgaKAjDXC=C2whnzBM8TAcv=stckYUw@mail.gmail.com Allocation done in critical section when initializing WAL]&lt;br /&gt;
* [https://www.postgresql.org/message-id/AD7252BEFBCA3846A8D34ABCDA258D080120F025C6@EXMBX05.mailcloud.dk pg_dump misses public role on schema public]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/87lgdyz1wj.fsf@ars-thinkpad Fix slot&#039;s xmin advancement and subxact&#039;s lost snapshots in decoding]&lt;br /&gt;
* [https://www.postgresql.org/message-id/1519917758.6586.8.camel@cybertec.at SHOW ALL does not honor pg_read_all_settings membership]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20170117.193645.160386781.horiguchi.kyotaro@lab.ntt.co.jp Continued WAL record can prevent standby from startup]&lt;br /&gt;
** Fixed in: {{PgCommitURL|0668719801838aa6a8bda330ff9b3d20097ea844}}&lt;br /&gt;
* [https://www.postgresql.org/message-id/3AD85097-A3F3-4EBA-99BD-C38EDF8D2949@postgrespro.ru FinishPreparedTransaction missing HOLD_INTERRUPTS section]&lt;br /&gt;
** Fixed in: {{PgCommitURL|8f9be261f43772ccee2eae94d971bac6557cbe6a}}&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 11beta1 ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/2018041911380869070310%40i-soft.com.cn Memory leaks with _SPI_stack handling in TopMemoryContext]&lt;br /&gt;
** Regression caused by commit 8561e48.&lt;br /&gt;
** Fixed in: {{PgCommitURL|30c66e77be1d890c3cca766259c0bec80bcac1b5}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/5AD4882B.10002%40lab.ntt.co.jp Oddity in tuple routing for foreign partitions]&lt;br /&gt;
** Fixed in: {{PgCommitURL|37a3058bc7c8224d4c0d8b36176d821636a1f90e}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180419052436.GA16000%40paquier.xyz Corrupted btree index on HEAD because of covering indexes]&lt;br /&gt;
** Fixed in: {{PgCommitURL|6db4b49986be3fe59a1f6ba6fabf9852864efc3e}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAFjFpRcwq7G16J_w%2Byy_xiE7daD0Bm6iYTnhz81f79yrSOn4DA%40mail.gmail.com#CAFjFpRcwq7G16J_w+yy_xiE7daD0Bm6iYTnhz81f79yrSOn4DA@mail.gmail.com Decide if we want a GUC to disable partition pruning]&lt;br /&gt;
** Fixed in: {{PgCommitURL|055fb8d33da6ff9003e3da4b9944bdcd2e2b2a49}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/2b02f1e9-9812-9c41-972d-517bdc0f815d%40lab.ntt.co.jp Fix partition pruning for the cases where partition key is of array, enum, record, or range type]&lt;br /&gt;
** [https://www.postgresql.org/message-id/69879396-3a63-8fa9-2fa7-4fd1035b9623%40lab.ntt.co.jp Patch exists]&lt;br /&gt;
** Bug fix: {{PgCommitURL|e5dcbb88a15d445e0ccb3db3194f4a122b792df6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAKJS1f-tux=KdUz6ENJ9GHM_V2qgxysadYiOyQS9Ko9PTteVhQ@mail.gmail.com Run-time pruning and Parallel Append don&#039;t work properly together]&lt;br /&gt;
** [https://www.postgresql.org/message-id/CAKJS1f-tux=KdUz6ENJ9GHM_V2qgxysadYiOyQS9Ko9PTteVhQ@mail.gmail.com Patch exists]&lt;br /&gt;
** Bug fixes: {{PgCommitURL|47c91b55991883322fdbc4495ce7fe6b2166e8fe}} {{PgCommitURL|4d0f6d3f207d}} {{PgCommitURL|b47a86f5008f2674af20dd00bc233e7b74e01bba}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/87woxi24uw.fsf@ansel.ydns.eu expand_tuple segfaults]&lt;br /&gt;
** coverage report shows it&#039;s completely untested, too&lt;br /&gt;
** Bug fix: {{PgCommitURL|7c44c46deb495a2f3861f402d7f2109263e3d50a}}&lt;br /&gt;
** Add coverage: {{PgCommitURL|b39fd897e0398a6bdc6552daa7cacdf9c0e46d7e}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/96cf4a6c-49ad-fa92-0d41-e4b911086dab%40lab.ntt.co.jp Handling of whole-row vars in ON CONFLICT on partitioned tables]&lt;br /&gt;
** Bug fix: {{PgCommitURL|158b7bc6d77948d2f474dc9f2777c87f81d1365a}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/12085bc4-0bc6-0f3a-4c43-57fe0681772b@lab.ntt.co.jp relispartition for index partitions]&lt;br /&gt;
** Bug fix: {{PgCommitURL|9e9befac4a2228ae8a5309900645ecd8ead69f53}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAGPqQf0W%2Bv-Ci_qNV_5R3A%3DZ9LsK4%2BjO7LzgddRncpp_rrnJqQ%40mail.gmail.com failure to validate default partition&#039;s constraint when attaching after4dba331cb3]&lt;br /&gt;
** [https://www.postgresql.org/message-id/487870f2-d538-9d07-13e8-4ca390e27d18%40lab.ntt.co.jp Patch exists]&lt;br /&gt;
** Bug fix: {{PgCommitURL|72cf7f310c0729a331f321fad39835ac886603dc}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/87in923lyw.fsf@ansel.ydns.eu Failed assertion on pfree() via perform_pruning_combine_step]&lt;br /&gt;
** Original commit: {{PgCommitURL|9fdb675fc5d2de825414e05939727de8b120ae81}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|7ba6ee815dc90d4fab7226d343bf72aa28c9aa5c}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkryAPcQOHBJKuDKfni-HGFny31yjcbM-yp5HO-71iCdw@mail.gmail.com Parallel index workers don&#039;t have activity set]&lt;br /&gt;
** Original commit: {{PgCommitURL|9da0cc35284bdbe8d442d732963303ff0e0a40bc}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|7de4a1bcc56f494acbd0d6e70781df877dc8ecb5}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180402065149.GC1908%40paquier.xyz check_ssl_key_file_permissions should be in be-secure-common.c]&lt;br /&gt;
** Original commit: {{PgCommitURL|8a3d9425290ff5f6434990349886afae9e1c6008}}&lt;br /&gt;
** [https://www.postgresql.org/message-id/20180402065149.GC1908%40paquier.xyz Patch exists]&lt;br /&gt;
** Bug fix: {{PgCommitURL|2764d5dcfa84d240c901c20ec6e194f72d82b78a}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAFjFpRcOTHZSFfHNwhAe4DmS%2BqvWmqK_UW3QF3wG8e0pAKW0tA%40mail.gmail.com#CAFjFpRcOTHZSFfHNwhAe4DmS+qvWmqK_UW3QF3wG8e0pAKW0tA@mail.gmail.com Missing break statement after transformCallStmt in transformStmt]&lt;br /&gt;
** Original commit: {{PgCommitURL|76b6aa41f41db66004b1c430f17a546d4102fbe7}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|13c7c65ec900a30bcddcb27f5fd138dcdbc2ca2e}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAKJS1f91kq1wfYR8rnRRfKtxyhU2woEA+=whd640UxMyU+O0EQ@mail.gmail.com Parallel index creation does not properly clean up after error]&lt;br /&gt;
** Original commit: {{PgCommitURL|29d58fd3adae9057c3fd502393b2f131bc96eaf9}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|47cb9ca49a611fa518e1a0fe46526507c96a5612}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/30721.1519750231@sss.pgh.pa.us pg_proc.prokind change means we need server-version-dependent tab completion in psql]&lt;br /&gt;
** [https://www.postgresql.org/message-id/24314.1520190408@sss.pgh.pa.us Proposed patch]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180409010031.GA11599%40paquier.xyz &amp;quot;make -j 4 install&amp;quot; broken after running configure]&lt;br /&gt;
** Bug fix: {{PgCommitURL|3b8f6e75f3c8c6d192621f21624cc8cee04ec3cb}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/152056616579.4966.583293218357089052@wrigleys.postgresql.org OpenTransientFile() should be paired with CloseTransientFile() rather than close()]&lt;br /&gt;
** Bug fix: {{PgCommitURL|231bcd0803eb91c526d4e7522c993fa5ed71bd45}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180409051112.GC1740%40paquier.xyz Fix pg_rewind which can be run as root user]&lt;br /&gt;
** Bug fix: {{PgCommitURL|5d5aeddabfe0b6b21f556c72a71e0454833d63e5}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAMyN-kA7aOJzBmrYFdXcc7Z0NmW+5jBaf_m=_-77uRNyKC9r=A@mail.gmail.com Fix for pg_stat_activity putting client hostaddr into appname field]&lt;br /&gt;
** Bug fix: {{PgCommitURL|a820b4c32946c499a2d19846123840a0dad071b5}} and {{PgCommitURL|811969b218ac2e8030dfbbb05873344967461618}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAFj8pRCgQ5_O4YL4ZKC5=6Oi7DW_q4xB7==_iN2yRKq7+1Tv9Q@mail.gmail.com Missing support of named convention for procedures]&lt;br /&gt;
** Bug fix: {{PgCommitURL|a8677e3ff6bb8ef78a9ba676faa647bba237b1c4}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180410042147.GB1552%40paquier.xyz Gotchas about pg_verify_checksums]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180411001058.GJ26769%40paquier.xyz pg_verify_checksums does not check after all-zero&#039;d pages]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180411075223.GB19732%40paquier.xyz Typos from the original patch]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180411082020.GD19732%40paquier.xyz Fixes for the documentation]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/5767.1523995174@sss.pgh.pa.us Repeated crashes in GENERATED ... AS IDENTITY tests]&lt;br /&gt;
** Bug fix: {{PgCommitURL|b1b71f16581fb5385fa9f9a663ffee271cdfaba5}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|676858bcb4c4d9d2d5ee63a87dbff01085984ee0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAKJS1f-BL%2Br5FXSejDu%3D%2BMAvzRARaawRnQ_ZFtbv_o6tha9NJw%40mail.gmail.com Partitions with bool partition keys]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/3041e853-b1dd-a0c6-ff21-7cc5633bffd0%40lab.ntt.co.jp wrong memory context used in FmgrInfo&#039;s contained in PartitionKey]&lt;br /&gt;
** Bug fix (HEAD): {{PgCommitURL|a4d56f583e7cff052c2699e62d867ae1c8fda4f3}}&lt;br /&gt;
** Bug fix (PG 10): {{PgCommitURL|5f11c6ec61a579d60347a5d13af7e42b17fadc56}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180422111100.GA1393%40paquier.xyz BGWORKER_BYPASS_ALLOWCONN used nowhere (infra part of on-line checksum switcher)]&lt;br /&gt;
** Bug fix: {{PgCommitURL|9cad926eb876a30d58a5b39789098da83a6ef91c}}&lt;br /&gt;
** Bug fix: {{PgCommitURL|43cc4ee6340779f2a17fb5bab27355c2cb2e23a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/87po3a3n46.fsf@ansel.ydns.eu Failed assertion in create_gather_path]&lt;br /&gt;
** Bug fix: {{PgCommitURL|dc1057fcd878d5c062c5c4c2b548af2be513b6ab}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180428073935.GB1736%40paquier.xyz Cold welcoming message when installing anything because of LLVM bitcode stuff]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CCAJrrPGedKiFE2fqntSauUfhapCksOJzam+QtHfSgx86LhXLeOQ@mail.gmail.com jitflags in _outPlannedStmt and _readPlannedStmt treated as bool type]&lt;br /&gt;
** Bug fix: {{PgCommitURL|cfffe83ba82021a1819a656e7ec5c28fb3a99152}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/20180413030828.GD1552%40paquier.xyz#20180413030828.GD1552@paquier.xyz wal_consistency_checking reports an inconsistency on master branch]&lt;br /&gt;
** Bug fix: {{PgCommitURL|1667148a4dd98cea28b8b53d57dbc1eece1b0b5c}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20180507001811.GA27389%40paquier.xyz Refreshing findoidjoins for v11]&lt;br /&gt;
** Bug fix: {{PgCommitURL|fbb99e5883d88687de4dbd832c2843f600ab3dd8}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== resolved before 11beta2 ===&lt;br /&gt;
&lt;br /&gt;
This lists the open items fixed between the release of 11 beta1 and 11 beta2. &lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
* feature freeze: 8th of April 2018&lt;br /&gt;
* beta1: 24th of April 2018 (planned)&lt;br /&gt;
* beta2: ZZZ&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Apt&amp;diff=31846</id>
		<title>Apt</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Apt&amp;diff=31846"/>
		<updated>2018-04-15T22:50:15Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: /* hic hoc hæc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==PostgreSQL packages for Debian and Ubuntu==&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Global Development Group (PGDG) maintains an APT repository of PostgreSQL packages for Debian and Ubuntu located at http://apt.postgresql.org/pub/repos/apt/.&lt;br /&gt;
We aim at building PostgreSQL server packages as well as extensions and modules packages on several Debian/Ubuntu releases for all PostgreSQL versions supported.&lt;br /&gt;
&lt;br /&gt;
Currently, we support&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Debian 7&#039;&#039;&#039; (wheezy), &#039;&#039;&#039;8&#039;&#039;&#039; (jessie), &#039;&#039;&#039;9&#039;&#039;&#039; (stretch), and &#039;&#039;&#039;unstable&#039;&#039;&#039; (sid)&lt;br /&gt;
* &#039;&#039;&#039;Ubuntu &#039;&#039;&#039;14.04&#039;&#039;&#039; (trusty), &#039;&#039;&#039;16.04&#039;&#039;&#039; (xenial)&lt;br /&gt;
* Architectures: &#039;&#039;&#039;amd64&#039;&#039;&#039; (64-bit x86), &#039;&#039;&#039;i386&#039;&#039;&#039; (32-bit x86), &#039;&#039;&#039;ppc64el&#039;&#039;&#039; (little-endian 64-bit POWER; not on wheezy/precise)&lt;br /&gt;
* &#039;&#039;&#039;PostgreSQL 9.2, 9.3, 9.4, 9.5, 9.6, 10&#039;&#039;&#039;, &amp;lt;!--[[Apt/FAQ#I_want_to_try_the_beta_version_of_the_next_PostgreSQL_release|9.4 beta]]--&amp;gt; [[Apt/FAQ#Development_snapshots|11devel]]&lt;br /&gt;
* Server extensions such as Slony-I, various PL languages, and datatypes&lt;br /&gt;
* Applications like pgadmin3, pgbouncer, and pgpool-II&lt;br /&gt;
&lt;br /&gt;
Packages for older PostgreSQL versions and older Debian/Ubuntu distributions will continue to stay in the repository; updates for those will be provided on an &#039;&#039;ad hoc&#039;&#039; basis.&lt;br /&gt;
&lt;br /&gt;
==Quickstart==&lt;br /&gt;
&lt;br /&gt;
Create &#039;&#039;&#039;/etc/apt/sources.list.d/pgdg.list&#039;&#039;&#039;. The distributions are called &#039;&#039;codename&#039;&#039;&#039;&#039;&#039;-pgdg&#039;&#039;&#039;. In the example, replace &#039;&#039;stretch&#039;&#039; with the actual distribution you are using:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;deb http://apt.postgresql.org/pub/repos/apt/&amp;lt;/nowiki&amp;gt; &#039;&#039;stretch&#039;&#039;-pgdg main&lt;br /&gt;
&lt;br /&gt;
(You may determine the codename of your distribution by running &#039;&#039;&#039;lsb_release -c&#039;&#039;&#039;). For a shorthand version of the above, presuming you are using a supported release:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo sh -c &#039;echo &amp;quot;deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import the repository key from &#039;&#039;&#039;https://www.postgresql.org/media/keys/ACCC4CF8.asc&#039;&#039;&#039;, update the package lists, and start installing packages:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install wget ca-certificates&lt;br /&gt;
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
 sudo apt-get install postgresql-10 pgadmin4   # on wheezy/jessie/trusty: pgadmin3&lt;br /&gt;
&lt;br /&gt;
Alternately, [https://salsa.debian.org/postgresql/postgresql-common/raw/master/pgdg/apt.postgresql.org.sh this shell script] will automate the repository setup.&lt;br /&gt;
Note that the shell script leaves the source package repo (deb-src) commented out; if you need source packages, you will need to modify /etc/apt/sources.list.d/pgdg.list to enable it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&#039;&#039;&#039;9.4 beta only:&#039;&#039;&#039; See [[Apt/FAQ#I_want_to_try_the_beta_version_of_the_next_PostgreSQL_release|FAQ on beta releases]]--&amp;gt;&lt;br /&gt;
Have a look at the &#039;&#039;&#039;[[Apt/FAQ|FAQ]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This repository provides &amp;quot;postgresql&amp;quot;, &amp;quot;postgresql-contrib&amp;quot;, and &amp;quot;postgresql-client&amp;quot; &#039;&#039;meta-packages&#039;&#039; that depend on the latest postgresql-x.y, ... packages, similar to the ones present in Debian and Ubuntu. Once a new PostgreSQL version is released, these meta-packages will be updated to depend on the new version. If you rather want to stay with a particular PostgreSQL version, you should install specific packages like &amp;quot;postgresql-10&amp;quot; instead of &amp;quot;postgresql&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For packages of development/alpha/beta versions of PostgreSQL, see the [[Apt/FAQ#I_want_to_try_the_beta_version_of_the_next_PostgreSQL_release|FAQ entry about beta versions]].&lt;br /&gt;
&lt;br /&gt;
==News==&lt;br /&gt;
&lt;br /&gt;
* 2018-01-17: Ubuntu zesty (17.04) is unsupported now, Ubuntu removed it from their mirrors&lt;br /&gt;
* 2017-10-05: PostgreSQL 10.0 has been released, postgresql-10 is the default version pulled in by &amp;quot;postgresql.deb&amp;quot; now&lt;br /&gt;
* 2017-05-18: PostgreSQL 10beta1 packages added, see [[Apt/FAQ#I_want_to_try_the_beta_version_of_the_next_PostgreSQL_release]]&lt;br /&gt;
* 2017-04-25: Ubuntu zesty (17.04) and Debian stretch (9) added, Ubuntu precise (12.04) deprecated: https://www.postgresql.org/message-id/20170425113312.d7odg7juvnunhtex%40msg.credativ.de&lt;br /&gt;
* 2017-02-23: postgresql-10 development snapshots available for sid, jessie, xenial, and trusty (via -pgdg-testing): [[Apt/FAQ#Development_snapshots]]&lt;br /&gt;
* 2016-09-29: ppc64el added as new architecture, along with full 9.6 support for all packages: https://www.postgresql.org/message-id/c86548a4-eea0-ff5d-9a14-1c136ef39ab6%402ndquadrant.it&lt;br /&gt;
* 2016-09-17: Ubuntu wily (15.10) deprecated.&lt;br /&gt;
* 2016-09-05: Redmine project for issue tracking: https://redmine.postgresql.org/projects/pgapt/issues&lt;br /&gt;
* 2016-07-31: Older versions of packages available: https://www.postgresql.org/message-id/20160731194944.amiwidhsoqh4osac%40msg.df7cb.de&lt;br /&gt;
* 2016-03-31: Ubuntu xenial (16.04) added.&lt;br /&gt;
* 2016-03-05: Debian squeeze (6) deprecated.&lt;br /&gt;
&lt;br /&gt;
Older news items: [[Apt/OldNews]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
* [[Apt/FAQ|FAQ]]&lt;br /&gt;
* [http://apt.postgresql.org/pub/repos/apt/ Package repository]&lt;br /&gt;
* [https://qa.debian.org/developer.php?login=pkg-postgresql-public@lists.alioth.debian.org PostgreSQL in Debian]&lt;br /&gt;
&lt;br /&gt;
===Contact===&lt;br /&gt;
&lt;br /&gt;
* Mailing list: pgsql-pkg-debian@postgresql.org ([http://archives.postgresql.org/pgsql-pkg-debian/ Archives])&lt;br /&gt;
* IRC channel: #postgresql-apt @ irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
===Maintainers===&lt;br /&gt;
&lt;br /&gt;
* Christoph Berg (credativ)&lt;br /&gt;
* Marco Nenciarini (2ndQuadrant)&lt;br /&gt;
&lt;br /&gt;
====Past Contributors====&lt;br /&gt;
&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
&lt;br /&gt;
===Bugs===&lt;br /&gt;
&lt;br /&gt;
Please report bugs:&lt;br /&gt;
* on the pgsql-pkg-debian@postgresql.org mailing list, or&lt;br /&gt;
* open an issue in [https://redmine.postgresql.org/projects/pgapt/issues Redmine], or&lt;br /&gt;
* open a bug in the [http://bugs.debian.org/ Debian BTS].&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
&lt;br /&gt;
* [[Apt/RepoDocs]]&lt;br /&gt;
* [[Apt/Jenkins]]&lt;br /&gt;
* [[Apt/NewPostgreSQLVersion]]&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
Work on setting up the archive was kindly supported by [http://www.credativ.de/ credativ], [http://www.2ndquadrant.com/ 2ndQuadrant], [http://redpill-linpro.com/ Redpill Linpro],&lt;br /&gt;
and funding from the European Union&#039;s Seventh Framework Programme (FP7/2007-2013) under grant agreement 258862.&lt;br /&gt;
&lt;br /&gt;
The amd64/i386 build server is kindly hosted by [https://www.dg-i.net/ DG-i].&lt;br /&gt;
The ppc64el build server is kindly hosted by [http://www.ibm.com/ibm/clientcenter/montpellier/ IBM Power Systems Linux Center, Montpellier].&lt;br /&gt;
The archive is hosted on postgresql.org hardware.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Design_Tools&amp;diff=31326</id>
		<title>Design Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Design_Tools&amp;diff=31326"/>
		<updated>2017-12-22T03:58:45Z</updated>

		<summary type="html">&lt;p&gt;Dfetter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tools to help with designing a schema, via creating [[https://en.wikipedia.org/wiki/Entity–relationship_model Entity-Relationship diagrams]] and similar.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== Aqua Data Studio ====&lt;br /&gt;
&lt;br /&gt;
http://www.aquafold.com/aquadatastudio/er_modeler.html&lt;br /&gt;
&lt;br /&gt;
The Aqua Data Studio Entity Relationship Modeler (ER Modeler) helps you design complex database models for all major RDBMS vendors and versions. Use the Forward Engineer feature to model entities and convert them into SQL Scripts, or Reverse Engineer existing databases to visualize a database model.&lt;br /&gt;
&lt;br /&gt;
==== DeZign ====&lt;br /&gt;
&lt;br /&gt;
http://www.datanamic.com/dezign/index.html&lt;br /&gt;
&lt;br /&gt;
Aan intuitive database design and modeling tool for developers and DBA&#039;s that can help you model, create and maintain databases. The software uses entity relationship diagrams (ERDs, data models) to graphically design databases and automatically generates the most popular SQL and desktop databases.&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL Maestro ====&lt;br /&gt;
&lt;br /&gt;
https://www.sqlmaestro.com/products/postgresql/maestro/&lt;br /&gt;
&lt;br /&gt;
==== Toad Data Modeller ====&lt;br /&gt;
&lt;br /&gt;
https://www.quest.com/products/toad-data-modeler/&lt;br /&gt;
&lt;br /&gt;
Toad Data Modeler enables you to rapidly deploy accurate changes to data structures across more than 20 different platforms. It allows you to construct logical and physical data models, compare and synchronize models, quickly generate complex SQL/DDL, create and modify scripts, as well as reverse and forward engineer both databases and data warehouse systems.&lt;br /&gt;
&lt;br /&gt;
May have free versions? Website is a bit of a wreck.&lt;br /&gt;
&lt;br /&gt;
==== EMS SQL Manager ====&lt;br /&gt;
&lt;br /&gt;
https://www.sqlmanager.net/en/products/postgresql/manager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== DB Designer Fork ====&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/dbdesigner-fork/&lt;br /&gt;
&lt;br /&gt;
DB Designer Fork is a fork of the fabFORCE DBDesigner 4. It integrates entity relationship design,front-end (you can run queries) and SQL exporting.DB Designer Fork generates SQL scripts for Oracle, SQL Server, MySQL, FireBird, SQLite and PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
==== ModelRight ====&lt;br /&gt;
&lt;br /&gt;
http://www.modelright.com&lt;br /&gt;
&lt;br /&gt;
ModelRight allows you to graphically view your database, enforce complex constraints, manage database views, validate design decisions, and generate complete CREATE and ALTER scripts.&lt;br /&gt;
&lt;br /&gt;
Docs mention support for Windows 7 and PostgreSQL 9.0.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software / Zero Cost ===&lt;br /&gt;
&lt;br /&gt;
==== pgdesigner ====&lt;br /&gt;
&lt;br /&gt;
http://pgdesigner.sourceforge.net/en/index.html&lt;br /&gt;
&lt;br /&gt;
== Cross-Platform ==&lt;br /&gt;
&lt;br /&gt;
=== Open Source / Free Software / Zero Cost ===&lt;br /&gt;
&lt;br /&gt;
==== pgModeler ====&lt;br /&gt;
&lt;br /&gt;
https://github.com/pgmodeler&lt;br /&gt;
https://www.pgmodeler.com.br&lt;br /&gt;
&lt;br /&gt;
Windows / Linux / macOS&lt;br /&gt;
&lt;br /&gt;
This is open source (GPLv3) and can be freely built yourself, if you have Qt available, but downloadable binaries appear to be time-limited demos that can be unlocked with paypal (?).&lt;br /&gt;
&lt;br /&gt;
==== Open System Architect ====&lt;br /&gt;
&lt;br /&gt;
http://www.codebydesign.com&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux / Solaris&lt;br /&gt;
&lt;br /&gt;
OSA currently supports data modelling (physical and logical) with UML in the works.&lt;br /&gt;
&lt;br /&gt;
==== SQL Power Architect ====&lt;br /&gt;
&lt;br /&gt;
http://software.sqlpower.ca/page/architect&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
The SQL Power Architect data modeling tool was created by data warehouse designers and has many unique features geared specifically for the data warehouse architect. It allows users to reverse-engineer existing databases, perform data profiling on source databases, and auto-generate ETL metadata.&lt;br /&gt;
&lt;br /&gt;
==== Valentina Studio ====&lt;br /&gt;
&lt;br /&gt;
https://www.valentina-db.com/en/valentina-studio-overview&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux&lt;br /&gt;
&lt;br /&gt;
Free version supports reverse-engineering an existing schema, but only the proprietary version supports forward-engineering.&lt;br /&gt;
&lt;br /&gt;
==== Open ModelSphere ====&lt;br /&gt;
&lt;br /&gt;
http://www.modelsphere.com/org/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
Open ModelSphere is a powerful data, process and UML modeling tool - supporting user interfaces in English and French.&lt;br /&gt;
&lt;br /&gt;
==== Umbrello ====&lt;br /&gt;
&lt;br /&gt;
https://umbrello.kde.org&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux&lt;br /&gt;
&lt;br /&gt;
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology.&lt;br /&gt;
&lt;br /&gt;
UML allows you to create diagrams of software and other systems in a standard format to document or design the structure of your programs.&lt;br /&gt;
&lt;br /&gt;
==== ERDesignerNG ====&lt;br /&gt;
&lt;br /&gt;
http://mogwai.sourceforge.net/erdesignerng.html&lt;br /&gt;
&lt;br /&gt;
Java, GPL&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ===&lt;br /&gt;
&lt;br /&gt;
==== DbSchema ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbschema.com&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux / Java&lt;br /&gt;
&lt;br /&gt;
Features interactive diagrams, relational data browse, schema compare and synchronization, query builder, query editor, HTML5 documentation, random data generator, forms and reports.&lt;br /&gt;
&lt;br /&gt;
==== DbVisualizer ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbvis.com&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux / Java&lt;br /&gt;
&lt;br /&gt;
A client that does a lot of things other than schema design. It has a free version that provides many of the features, but not apparently design and DDL export.&lt;br /&gt;
&lt;br /&gt;
==== DbWrench ====&lt;br /&gt;
&lt;br /&gt;
http://www.dbwrench.com&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Linux / Java&lt;br /&gt;
&lt;br /&gt;
Diagramming / Forward &amp;amp; Reverse Engineering&lt;br /&gt;
&lt;br /&gt;
==== StarUML ====&lt;br /&gt;
&lt;br /&gt;
http://staruml.io&lt;br /&gt;
&lt;br /&gt;
Windows / macOS / Ubuntu&lt;br /&gt;
&lt;br /&gt;
https://github.com/adrianandrei-ca/staruml-postgresql - extension to support PostgreSQL&lt;br /&gt;
&lt;br /&gt;
(This is version 2. The much older, open source version 1 is available at http://staruml.sourceforge.net/v1/download.php)&lt;br /&gt;
&lt;br /&gt;
==== Vertabelo ====&lt;br /&gt;
&lt;br /&gt;
http://www.vertabelo.com&lt;br /&gt;
&lt;br /&gt;
Purely web-based, a monthly fee per user.&lt;br /&gt;
&lt;br /&gt;
==== Navicat ====&lt;br /&gt;
&lt;br /&gt;
https://www.navicat.com/en/products/navicat-for-postgresql&lt;br /&gt;
&lt;br /&gt;
Windows, macOS, iOS&lt;br /&gt;
&lt;br /&gt;
A general purpose client with good modeling features.&lt;br /&gt;
&lt;br /&gt;
=== Obsolete or End-of-Life ===&lt;br /&gt;
&lt;br /&gt;
==== Druid 3 ====&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/druid/&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
The druid is a tools that allows users to create databases in a graphical way. The user can add tables, fields, folders to group tables and can modify most of the database options that follow the SQL-92 standard. In addition to sql options, the user can document each table and each field with HTML information.&lt;br /&gt;
&lt;br /&gt;
== Commandline Tools ==&lt;br /&gt;
&lt;br /&gt;
Tools that take a description of a database schema in one format and convert it to SQL, and sometimes vice-versa.&lt;br /&gt;
&lt;br /&gt;
=== dbmstools ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/charlesnagy/xml2ddl&lt;br /&gt;
&lt;br /&gt;
Python, uses XML as the one true format and generates migration scripts from that.&lt;br /&gt;
&lt;br /&gt;
=== SQLFairy ===&lt;br /&gt;
&lt;br /&gt;
http://sqlfairy.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
Perl, manipulate structured data definitions (mostly database schemas) in interesting ways, such as converting among different dialects of CREATE syntax (e.g., MySQL-to-Oracle), visualizations of schemas (pseudo-ER diagrams: GraphViz or GD), automatic code generation (using Class::DBI), converting non-RDBMS files to SQL schemas (xSV text files, Excel spreadsheets), serializing parsed schemas (via Storable, YAML and XML), creating documentation (HTML and POD), and more.&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
[[GUI Database Design Tools]] - older list that this page was started from&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>
	</entry>
</feed>