<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17085626</id><updated>2026-04-28T02:53:24.941-07:00</updated><category term="SunBlogs"/><category term="postgresql"/><category term="VMware"/><category term="docker"/><category term="DataDirector"/><category term="AmazonRDS"/><category term="aws"/><category term="windows"/><title type='text'>Jignesh Shah&#39;s  Blog</title><subtitle type='html'>Blog about evolving Data technologies like PostgreSQL</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>195</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17085626.post-3457687877371270931</id><published>2019-09-19T18:55:00.000-07:00</published><updated>2020-04-19T22:20:08.797-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AmazonRDS"/><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>PostgreSQL Extensions - A Deeper Look</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
My slides from my session &quot;PostgreSQL Extensions - A Deeper Look&quot; at PostgresOpen 2019 and PostgresConf SV 2019&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/56sA0xc0xNCGf0&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/postgresql-extensions-a-deeper-look&quot; target=&quot;_blank&quot; title=&quot;PostgreSQL Extensions: A deeper look&quot;&gt;PostgreSQL Extensions: A deeper look&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;This blog represents my own view points and not of my employer, Amazon Web Services.

&lt;/b&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/3457687877371270931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/3457687877371270931' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3457687877371270931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3457687877371270931'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2019/09/postgresql-extensions-deeper-look.html' title='PostgreSQL Extensions - A Deeper Look'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-9155880016779865540</id><published>2019-09-08T21:00:00.000-07:00</published><updated>2019-09-08T21:38:36.614-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AmazonRDS"/><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Tuning DB Parameters for PostgreSQL 12 in Amazon RDS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In my last entry, we saw how to setup &lt;a href=&quot;http://jkshah.blogspot.com/2019/08/setting-up-postgresql-12-beta-3-for.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL 12 beta 3 in Amazon RDS&lt;/a&gt;. In that entry I purposely left out how to change database parameters as I realized that it deserves an entry (or more) by itself.&lt;br /&gt;
&lt;br /&gt;
Using the AWS CLI you can create a new database parameter group as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;$ aws rds create-db-parameter-group  --db-parameter-group-name jkpg12pg    \
 --db-parameter-group-family postgres12 --description &quot;My PostgreSQL 12 Parameter Group&quot; \
 --region us-east-2 --endpoint https://rds-preview.us-east-2.amazonaws.com  

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
We have just created a group and not applied the parameters to any database. Before we apply, we do to see what are the default values&amp;nbsp; in the created group. You can run a command as follows to see values being set by default in the group.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 653px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;$ aws rds describe-db-parameters --db-parameter-group-name jkpg12pg  \
--region us-east-2 --endpoint https://rds-preview.us-east-2.amazonaws.com \
--query &#39;Parameters[].[ParameterName,ParameterValue]&#39; --output text
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
The output contains a list of parameters with values. Let&#39;s look at some of the values to see how to interpret them.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 653px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;
application_name None
..
autovacuum_max_workers GREATEST({DBInstanceClassMemory/64371566592},3)
autovacuum_vacuum_cost_limit GREATEST({log(DBInstanceClassMemory/21474836480)*600},200)
..
effective_cache_size {DBInstanceClassMemory/16384}
..
jit None
..
maintenance_work_mem GREATEST({DBInstanceClassMemory*1024/63963136},65536)
max_connections LEAST({DBInstanceClassMemory/9531392},5000)
..
shared_buffers {DBInstanceClassMemory/32768}
shared_preload_libraries pg_stat_statements
..
work_mem None
xmlbinary None
xmloption None
       
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
When you see &lt;i&gt;None&lt;/i&gt; it basically is equivalent to being not set in postgresql.conf and the default value of the PostgreSQL version engine is used by PostgreSQL. In the above example, you will notice that &lt;i&gt;jit&lt;/i&gt; is set to &lt;i&gt;None&lt;/i&gt; which means it will take the default&amp;nbsp; &lt;i&gt;ON&lt;/i&gt; value in PostgreSQL 12 and enable &lt;i&gt;jit&lt;/i&gt; in the instance.&lt;br /&gt;
&lt;br /&gt;
If you change a parameter set to a specific value based on the supported type for that parameter, then that value (based on the supported unit) will be used instead of the default value in PostgreSQL. For example you see that shared_preload_libraries has a default value of&amp;nbsp;&lt;span style=&quot;background-color: #eeeeee; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px;&quot;&gt;pg_stat_statements&lt;/span&gt;. Which means when you deploy a PostgreSQL 12 instance, pg_stat_statements extension will have the library preloaded and available for it without requiring another restart.&lt;br /&gt;
&lt;br /&gt;
Other interesting parameters are ones with values containing &lt;i&gt;{}&lt;/i&gt; or with &lt;i&gt;GREATEST&lt;/i&gt; or &lt;i&gt;LEAST&lt;/i&gt; functions. These values are using macro functions allowing you to set them based on the &lt;i&gt;DBInstanceClassMemory&lt;/i&gt; (in bytes) based on the instance size used by the database instance.&lt;br /&gt;
&lt;br /&gt;
For example, shared_buffers is set to&amp;nbsp;&lt;span style=&quot;background-color: #eeeeee; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px;&quot;&gt;{DBInstanceClassMemory/32768}&lt;/span&gt;&amp;nbsp;. In PostgreSQL, when there are no units, shared_buffers is set to the number of 8KB&amp;nbsp; pages based on the value.&lt;br /&gt;
So in this example it shows that it is set to&amp;nbsp; 25% or 1/4th of total RAM in bytes in terms of 8192 bytes =&amp;nbsp; &amp;nbsp;(RAM/8192 )/4 or RAM/32768.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Setting values is an important task to get optimum usage of a PostgreSQL database. Lets look at how I think of setting these values for an instance.&lt;br /&gt;
&lt;br /&gt;
Lets consider a case of an RDS instance type of db.m4.16xlarge with 64GB as  RAM. For simplicity, I am not considering basic Linux kernel memory and RDS monitoring and other OS processes but filesystem cache will be considered as that is significant portion of memory used by a PostgreSQL instance. The other major component are shared buffers which is a common shared memory area used by PostgreSQL processes. The final component is the aggregate of all individual private memory of each connection of PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;TOTAL RAM = Filesystem Cache + Shared DB Buffers Cache +  Sum of all&amp;nbsp; PostgreSQL connections&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
By default on RDS, the shared buffers are set to 25% of RAM. It would be fair to consider that file system cache usage could be equal or greater than that as all pages will come through file system cache and constitutes 25-30% of RAM. While shared_buffers can be controlled by the shared_buffers parameter, the file system cache cannot be controlled directly, however it can be freed by OS during low memory situations.   So using our example of 64GB total memory, we already have accounted for 16GB + 16-20GB of file system cache, leaving about 28-32GB of memory free for your private memory consumed by database connections. In the rest of the calculation we assume this two part to be roughly 50% of RAM&lt;br /&gt;
&lt;br /&gt;
Private memory of database connections are hard to easily measure as they are not &#39;&lt;i&gt;RSS&lt;/i&gt;&#39; of a process but &#39;&lt;i&gt;RSS&lt;/i&gt;&#39; - touched shared memory pages and depends on the number of connections and chunks of &lt;i&gt;work_mem&lt;/i&gt; consumed by each connection.&lt;br /&gt;
&lt;br /&gt;
For capacity calculation we could use something simple as&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0.0001pt;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;Average Memory per PostgreSQL connections * Concurrent Connections &amp;lt;= 50% of RAM&amp;nbsp;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
where Average memory per PostgreSQL connection can be simplified to say n * &lt;i&gt;work_mem&lt;/i&gt; + process overhead where n can vary by the type of queries. For example a query with JOIN of two tables and ORDER BY can end up using 2 &lt;i&gt;work_mem&lt;/i&gt; chunks along with memory process overhead. Putting that into numbers with a default &lt;i&gt;work_mem&lt;/i&gt; of 4MB and an approximate process overhead of say roughly 5MB of PostgreSQL (if Linux huge pages are disabled then this number may need to bumped on higher side), each PostgreSQL connection is about  2x4 + 5 = 13MB. If you have 1,000 concurrent MB you may end up consuming about 13GB and for 2,000 connections that number can jump to 26GB.  Hence we should make sure that&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;caret-color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt; text-size-adjust: auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;caret-color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt; text-indent: 0.5in; text-size-adjust: auto;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;i&gt;Work_mem &amp;lt;= &amp;nbsp;&amp;nbsp;(&amp;nbsp; 50% RAM in KB &amp;nbsp;/concurrent_connections&amp;nbsp; &amp;nbsp;- &amp;nbsp;5,000 KB)/2&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;caret-color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt; text-size-adjust: auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Hence query tuning, lowering &lt;i&gt;work_mem&lt;/i&gt;, &lt;i&gt;max_connections&lt;/i&gt; can help control  this component of the memory. If your queries actually ends up requiring more &lt;i&gt;work_mem&lt;/i&gt; memory, then your default 25% of shared_buffers needs to be reduced down to make more memory available for your &lt;i&gt;work_mem&lt;/i&gt; and &lt;i&gt;max_connection&lt;/i&gt; needs.  It is perfectly reasonable to take down the percentage of &lt;i&gt;shared_buffers&lt;/i&gt; to fit the number of concurrent connections as it is better to have lower hit ratio of buffer pool than ending up using swap space.&lt;br /&gt;
&lt;br /&gt;
The above perspective is a  simple way to look at it. I am ignoring other things like temporary tables in memory and other temporary memory that will also consume memory with the assumption queries are simple join and order by queries. But if you are using temporary tables and have large analytical queries,  you have to account for that memory in your average memory per PostgreSQL connection to arrive at the usage needed and then maybe reduce shared buffers to make sure the total usage is within total RAM and not end up using swap or causing large flush of the file system cache.&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;caret-color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt; text-size-adjust: auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0.0001pt;&quot;&gt;
If you want to lower your shared buffers to say  20% instead of the default 25%, you would change the macro for the parameter to be set to  (RAM/8192)/5 or&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px;&quot;&gt;{DBInstanceClassMemory/40960}&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
To override a parameter in a particular group you can do as follows:&lt;br /&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); font-family: calibri, sans-serif; font-size: 12pt; line-height: 14px; overflow: auto; padding: 5px; width: 653px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;$ aws rds modify-db-parameter-group --db-parameter-group-name jkpg12pg \
 --region us-east-2 --endpoint https://rds-preview.us-east-2.amazonaws.com  \
 --parameters &quot;ParameterName=shared_buffers,ParameterValue=\&quot;{DBInstanceClassMemory/40960}\&quot;,ApplyMethod=pending-reboot&quot; 

&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
When you list it again you see the change in the parameter group.  If you notice that for this parameter, the &lt;i&gt;ApplyMethod&lt;/i&gt; is &lt;i&gt;pending-reboot&lt;/i&gt;. For static parameters you can only apply them on reboot and &lt;i&gt;shared_buffers&lt;/i&gt; is a static parameter. For dynamic parameters you can also use &quot;&lt;i&gt;immediate&lt;/i&gt;&quot; as &lt;i&gt;ApplyMethod&lt;/i&gt;, which will apply the changes immediately to all database instances using the parameter group.&lt;br /&gt;
&lt;br /&gt;
In our case we have still not applied it to the database yet so it does not matter. Lets first apply it to our database.&lt;br /&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); font-family: calibri, sans-serif; font-size: 12pt; line-height: 14px; overflow: auto; padding: 5px; width: 653px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;$ aws rds modify-db-instance \
 --db-instance-identifier mypg12b3 --db-parameter-group jkpg12pg \
 --region us-east-2 --endpoint  https://rds-preview.us-east-2.amazonaws.com 

&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Note however changing the group does not mean all the parameters are in effect. Since static changes can only be applied after a reboot, we will reboot the instance as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); font-family: calibri, sans-serif; font-size: 12pt; line-height: 14px; overflow: auto; padding: 5px; width: 653px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;$ aws rds reboot-db-instance  --db-instance-identifier mypg12b3  \
--region us-east-2 --endpoint  https://rds-preview.us-east-2.amazonaws.com  
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;font-family: calibri, sans-serif; font-size: 12pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
With the reboot now we have a database running with a custom parameter group which has parameters sets tuned based on the expected workflow. You may not get them right in the first try but now you know how to set them and apply them to the database using the CLI commands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;post-body entry-content&quot; id=&quot;post-body-8845581363739296081&quot; itemprop=&quot;description articleBody&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.4; orphans: 2; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; width: 728px; word-spacing: 0px;&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;This blog represents my own view points and not of my employer, Amazon Web Services.&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/9155880016779865540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/9155880016779865540' title='66 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/9155880016779865540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/9155880016779865540'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2019/09/tuning-db-parameters-for-postgresql-12.html' title='Tuning DB Parameters for PostgreSQL 12 in Amazon RDS'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>66</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-8845581363739296081</id><published>2019-08-29T00:28:00.000-07:00</published><updated>2019-09-09T08:55:00.829-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AmazonRDS"/><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Setting up PostgreSQL 12 Beta 3 for Testing in Amazon RDS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
One of the amazing things about the PostgreSQL community is launching releases like clockwork. On 8/8/2019 the PostgreSQL community not only launched the minor versions for PostgreSQL 11 and old major versions but also a new Beta 3 version for upcoming PostgreSQL 12.&lt;br /&gt;
&lt;br /&gt;
On AWS, you can check versions of PostgreSQL available in your region as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ aws rds describe-db-engine-versions --engine postgres --query &#39;DBEngineVersions[*].EngineVersion&#39;
[
    &quot;9.3.12&quot;, 
...  
    &quot;11.2&quot;, 
    &quot;11.4&quot;
]
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
You will not see any beta versions out there. Pre-release versions for PostgreSQL in AWS&amp;nbsp; are available in the &lt;a href=&quot;https://aws.amazon.com/rds/databasepreview/&quot; target=&quot;_blank&quot;&gt;Database Preview Environment&lt;/a&gt; within US East 2 (Ohio).&amp;nbsp; If you are using the cli you have to add the region us-east-2 and also the url endpoint&amp;nbsp; rds-preview.us-east-2.amazonaws.com to your CLI commands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ aws rds describe-db-engine-versions --engine postgres \
  --query &#39;DBEngineVersions[*].EngineVersion&#39; \
  --region us-east-2 --endpoint https://rds-preview.us-east-2.amazonaws.com
[
    &quot;12.20190617&quot;, 
    &quot;12.20190806&quot;
]
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
The versions displayed are bit cryptic but they denote the&amp;nbsp; major version followed by date&amp;nbsp; when the build was synced for the preview release.

The version description will be more friendly to read than the version itself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ aws rds describe-db-engine-versions --engine postgres \
  --query &#39;DBEngineVersions[*].DBEngineVersionDescription&#39; \
  --region us-east-2 --endpoint https://rds-preview.us-east-2.amazonaws.com
[
    &quot;PostgreSQL 12.20190617 (BETA2)&quot;, 
    &quot;PostgreSQL 12.20190806 (BETA3)&quot;
]
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
Lets deploy an instance of PostgreSQL 12 Beta 3 aka version 12.20190806.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ aws rds create-db-instance  \
--engine postgres  --engine-version 12.20190806 --db-instance-identifier mypg12b3 \
--allocated-storage 100 --db-instance-class db.t2.small     \
--db-name benchdb  --master-username pgadmin  --master-user-password SuperSecret \
--region us-east-2 --endpoint  https://rds-preview.us-east-2.amazonaws.com  

       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
After couple or few minutes the end point will be available and can be queried as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ aws rds describe-db-instances  --db-instance-identifier mypg12b3 --query &#39;DBInstances[].Endpoint&#39; \
--region us-east-2 --endpoint  https://rds-preview.us-east-2.amazonaws.com 
[
    {
        &quot;HostedZoneId&quot;: &quot;ZZOC4A7DETW6VV&quot;, 
        &quot;Port&quot;: 5432, 
        &quot;Address&quot;: &quot;mypg12b3.c9zz9zzzzzzz.us-east-2.rds-preview.amazonaws.com&quot;
    }
]

       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
If you have a default vpc security group defined in US East 2 (Ohio), you should be able to use the latest psql client to connect to it based on your default rules. If you do not have a default vpc security group, a new security group is created for you to which you have to add your client to the database instance. The security group will be in your US-East-2 (Ohio) region EC2 security groups for the preview environment.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Once you have your client added to the security group, your client will be able to connect to the database as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

$ psql -h mypg12b3.c9zz9zzzzzzz.us-east-2.rds-preview.amazonaws.com -d benchdb -U pgadmin 
Password for user pgadmin: 
psql (10.4, server 12beta3)
WARNING: psql major version 10, server major version 12.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type &quot;help&quot; for help.

benchdb=&amp;gt; select version();
                                                  version                                                  
-----------------------------------------------------------------------------------------------------------
 PostgreSQL 12beta3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
(1 row)

benchdb=&amp;gt; 
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
For this given major version, the supported extensions can be queried as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

benchdb=&amp;gt; show rds.extensions;
                                                                                                                                                                                                        
                                                                                                    rds.extensions                                                                                      
                                                                                                                                                                                                        
              
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------
 address_standardizer, address_standardizer_data_us, amcheck, aws_commons, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hstore, hstore_plperl,
 intagg, intarray, ip4r, isn, jsonb_plperl, log_fdw, ltree, pageinspect, pg_buffercache, pg_freespacemap, pg_prewarm, pg_similarity, pg_stat_statements, pg_trgm, pg_visibility, pgcrypto, pgrouting, pg
rowlocks, pgstattuple, pgtap, plperl, plpgsql, pltcl, postgis, postgis_tiger_geocoder, postgis_topology, postgres_fdw, prefix, sslinfo, tablefunc, test_parser, tsm_system_rows, tsm_system_time, unacce
nt, uuid-ossp
(1 row)
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Extensions are created using your master username login as follows:

&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;

benchdb=&amp;gt; CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION
benchdb=&amp;gt; CREATE EXTENSION postgis;
CREATE EXTENSION
benchdb=&amp;gt; CREATE EXTENSION postgis_topology;
CREATE EXTENSION
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
To verify the versions of the extensions that I have created.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;
benchdb=&amp;gt; select * from pg_extension;
  oid  |      extname       | extowner | extnamespace | extrelocatable | extversion  |   extconfig   |          extcondition           
-------+--------------------+----------+--------------+----------------+-------------+---------------+---------------------------------
 14299 | plpgsql            |       10 |           11 | f              | 1.0         |               | 
 16402 | pg_stat_statements |       10 |         2200 | t              | 1.7         |               | 
 16410 | postgis            |       10 |         2200 | f              | 3.0.0alpha3 | {16712}       | {&quot;WHERE NOT (                  +
...
       |                    |          |              |                |             |               | )&quot;}
 17418 | postgis_topology   |       10 |        17417 | f              | 3.0.0alpha3 | {17421,17434} | {&quot;&quot;,&quot;&quot;}
(4 rows)
       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
One of the recent enhancements available since PostgreSQL 11 release in Amazon RDS  is that pg_stat_statements library is now loaded by default unless explicitly disabled. This means I can immediately use pg_stat_statements after creating the extension.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;fixed&amp;quot; , monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;       &lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;
benchdb=&amp;gt;     
select * from pg_stat_statements order by total_time desc limit 4;
 userid | dbid  |       queryid        |               query               | calls | total_time  |  min_time   |  max_time   |  mean_time  | stddev_time | rows | shared_blks_hit | shared_blks_read | s
hared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time 
--------+-------+----------------------+-----------------------------------+-------+-------------+-------------+-------------+-------------+-------------+------+-----------------+------------------+--
-------------------+---------------------+----------------+-----------------+--------------------+--------------------+----------------+-------------------+---------------+----------------
     10 | 16384 | -6310040060866956228 | select pg_start_backup($1, $2)    |     1 | 4934.715563 | 4934.715563 | 4934.715563 | 4934.715563 |           0 |    1 |               0 |                0 |  
                 0 |                   0 |              0 |               0 |                  0 |                  0 |              0 |                 0 |             0 |              0
     10 | 16384 |  4124339773204179264 | select pg_stop_backup()           |     1 | 4656.211207 | 4656.211207 | 4656.211207 | 4656.211207 |           0 |    1 |               0 |                0 |  
                 0 |                   0 |              0 |               0 |                  0 |                  0 |              0 |                 0 |             0 |              0
  16394 | 16396 | -2030728853740878493 | CREATE EXTENSION postgis          |     1 |  691.652456 |  691.652456 |  691.652456 |  691.652456 |           0 |    0 |           71359 |              247 |  
               835 |                 707 |              0 |               0 |                  0 |                  0 |              0 |                 0 |             0 |              0
  16394 | 16396 | -2651058291501154175 | CREATE EXTENSION postgis_topology |     1 |   61.100119 |   61.100119 |   61.100119 |   61.100119 |           0 |    0 |            8539 |               26 |  
                57 |                  37 |              0 |               0 |                  0 |                  0 |              0 |                 0 |             0 |              0
(4 rows)

       &lt;/code&gt;
 &lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Note the instances in preview environment are meant for development and testing for 60 days with your applications to try out new features and optimize them for PostgreSQL 12 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;This blog represents my own view points and not of my employer, Amazon Web Services.

&lt;/b&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/8845581363739296081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/8845581363739296081' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/8845581363739296081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/8845581363739296081'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2019/08/setting-up-postgresql-12-beta-3-for.html' title='Setting up PostgreSQL 12 Beta 3 for Testing in Amazon RDS'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-2631360987665419634</id><published>2019-02-06T02:17:00.000-08:00</published><updated>2019-02-06T02:17:21.409-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AmazonRDS"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>PGConf.RU 2019: Slides from my sessions</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It was my first visit to Moscow for PGConf.RU 2019. Enjoyed meeting the strong community of PostgreSQL in Russia!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Slides from my sessions:&lt;br /&gt;
&lt;br /&gt;
1. Deep Dive into the RDS PostgreSQL Universe&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/KmvP4wwUrnsRVo&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/deep-dive-into-the-rds-postgresql-universe&quot; target=&quot;_blank&quot; title=&quot;Deep Dive into the RDS PostgreSQL Universe&quot;&gt;Deep Dive into the RDS PostgreSQL Universe&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Tips and Tricks for Amazon RDS for PostgreSQL&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/aqQpiavL1uWMDS&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/tips-and-tricks-with-amazon-rds-for-postgresql&quot; target=&quot;_blank&quot; title=&quot;Tips and Tricks with Amazon RDS for PostgreSQL&quot;&gt;Tips and Tricks with Amazon RDS for PostgreSQL&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Cambria, Georgia, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 15.2px;&quot;&gt;This blog represents my own view points and not of my employer, Amazon Web Services.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Cambria, Georgia, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 15.2px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/2631360987665419634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/2631360987665419634' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2631360987665419634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2631360987665419634'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2019/02/pgconfru-2019-slides-from-my-sessions.html' title='PGConf.RU 2019: Slides from my sessions'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-8974901462836491160</id><published>2018-10-18T22:26:00.000-07:00</published><updated>2018-10-18T22:26:59.659-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Hello PostgreSQL 11 - Get ready to say goodbye to PostgreSQL 9.3</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Earlier today (Oct 18, 2018), the PostgreSQL community &lt;a href=&quot;https://www.postgresql.org/about/news/1894/&quot; target=&quot;_blank&quot;&gt;announced the release of PostgreSQL 11&lt;/a&gt;.&amp;nbsp; Having done multiple software releases earlier, I appreciate the hard work by all contributors to get yet another major release on schedule. It is hard to do a major release every year and the community has been &lt;a href=&quot;https://en.wikipedia.org/wiki/PostgreSQL#Release_history&quot; target=&quot;_blank&quot;&gt;doing it since PostgreSQL 8.4&lt;/a&gt; making this the 10th&amp;nbsp; release in the last decade.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Everybody has their favorite feature in PostgreSQL 11 and I have one that is top on my list which is the transactional support in &lt;a href=&quot;https://www.postgresql.org/docs/11/static/sql-createprocedure.html&quot; target=&quot;_blank&quot;&gt;stored procedures&lt;/a&gt;.&amp;nbsp; &lt;a href=&quot;https://blog.2ndquadrant.com/postgresql-11-server-side-procedures-part-1/&quot; target=&quot;_blank&quot;&gt;2nd Quadrant &lt;/a&gt;had first announced that feature end of last year and at that time, it instantly became my favorite as I see it as a giant leap in PostgreSQL as it allows people to essentially write long data routines like ETL broken down in multiple transactions. Of course many users will certainly enjoy the improvements in&amp;nbsp; table partitioning system, query parallelism, and just-in-time (JIT) compilation for accelerating the execution of expressions in queries. However, the developers will certainly get more freedom with the stored procedure improvements.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
With the release of PostgreSQL 11, now there are 6 major releases supported: PostgreSQL 9.3, 9.4, 9.5, 9.6, 10 and, 11. It is definitely a good time to start thinking to upgrade your PostgreSQL 9.3 databases. As per the &lt;a href=&quot;https://www.postgresql.org/support/versioning/&quot; target=&quot;_blank&quot;&gt;versioning policy&lt;/a&gt;, the final minor release for PostgreSQL 9.3 will be on November 8th, 2018.&amp;nbsp; PostgreSQL 9.3 will be the last major version which does not support&lt;a href=&quot;https://www.postgresql.org/docs/9.4/static/logicaldecoding.html&quot; target=&quot;_blank&quot;&gt; logical replication&lt;/a&gt;&amp;nbsp;which was first introduced in PostgreSQL 9.4.&amp;nbsp; Hence, I expect this is will be the last painful upgrade because PostgreSQL 9.4 onwards you can always leverage logical replication to minimize the downtime while switching to a new version. All is not lost for PostgreSQL 9.3, while the experience is not exactly the same there are still tools available using the older trigger based replication to help or just bite the bullet and upgrade once with a small maintenance window as later versions will give you more options for your next major version upgrade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
If you need tips and tricks for upgrading your PostgreSQL 9.3 instances,&amp;nbsp; let me know! :-)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/8974901462836491160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/8974901462836491160' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/8974901462836491160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/8974901462836491160'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2018/10/hello-postgresql-11-get-ready-to-say.html' title='Hello PostgreSQL 11 - Get ready to say goodbye to PostgreSQL 9.3'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-42081952791330719</id><published>2018-07-25T21:10:00.001-07:00</published><updated>2018-07-27T12:05:32.817-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Loading data in PostgreSQL 11 Beta Using Native Logical Replication from PostgreSQL 10 in Amazon RDS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In the &lt;a href=&quot;http://jkshah.blogspot.com/2018/06/setting-up-postgresql-11-beta-1-in.html&quot; target=&quot;_blank&quot;&gt;last blog entry&lt;/a&gt;,&amp;nbsp; I talked about creating two instances of PostgreSQL 11 Beta in &lt;a href=&quot;https://aws.amazon.com/rds/databasepreview/&quot; target=&quot;_blank&quot;&gt;Amazon RDS Database Preview Environment&lt;/a&gt; and setting up native logical replication. Today, Amazon RDS announced &lt;a href=&quot;https://aws.amazon.com/about-aws/whats-new/2018/07/rds-postgresql-supports-minor-versions/&quot; target=&quot;_blank&quot;&gt;support for PostgreSQL 10.4 with native logical replication&lt;/a&gt;.&amp;nbsp; Let&#39;s see how to use this new support to replicate data from PostgreSQL 10 in Amazon RDS into PostgreSQL 11 Beta instances in&amp;nbsp; preview environment.&lt;br /&gt;
&lt;br /&gt;
I&amp;nbsp; start with a new PostgreSQL 10.4 instance in Amazon RDS and populated it with data from an older dataset of IMDB.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb-&amp;gt; \d&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List of relations&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;Schema |&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Name&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp;Type&amp;nbsp; &amp;nbsp;|&amp;nbsp; Owner&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------+---------------------------------------+----------+---------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | acted_in&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | acted_in_idacted_in_seq&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| sequence | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | actors&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | aka_names&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | aka_names_idaka_names_seq&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| sequence | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | aka_titles&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | aka_titles_idaka_titles_seq&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| sequence | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | genres&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | keywords&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | movies&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | movies_genres&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | movies_genres_idmovies_genres_seq&amp;nbsp; &amp;nbsp; &amp;nbsp;| sequence | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | movies_keywords&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | movies_keywords_idmovies_keywords_seq | sequence | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;public | series&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | table&amp;nbsp; &amp;nbsp; | pgadmin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(15 rows)&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This &quot;production&quot; PostgreSQL 10 database also has data in it.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from acted_in;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;618706&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from movies;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;183510&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from series;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;162498&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In order to prepare PostgreSQL 10 instance in Amazon RDS for logical replication, we need to verify that rds.logical_replication database parameter is enabled. If it is not enabled, you can create a customer parameter group with rds.logical_replication enabled and the parameter group assigned to the database instance. In my case I had already used a custom parameter group with logical replication enabled.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; show rds.logical_replication;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;rds.logical_replication&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;-------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;on&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In order to use logical replication,&amp;nbsp; a replication user to be created&amp;nbsp; in PostgreSQL 10 instance that will be used to connect from PostgreSQL 11 instance. In case of Amazon RDS, that can be done by granting the rds_replication role to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; CREATE USER pg11repluser WITH password &#39;SECRET&#39;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;CREATE ROLE&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; GRANT rds_replication TO pg11repluser;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;GRANT ROLE&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For security purpose, it is better that the replication user only has SELECT permissions on the tables to be replicated.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; GRANT SELECT ON ALL TABLES IN SCHEMA public TO pg11repluser;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;GRANT&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The final step inside the database is to create&amp;nbsp; a publication pgprod10 to indicate which tables need to be replicated. An easier way to select all tables is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; CREATE PUBLICATION pgprod10 FOR ALL TABLES;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;CREATE PUBLICATION&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;One&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&amp;nbsp;thing to note here is to edit&amp;nbsp; the inbound rules of the security group of the production instance to allow the PostgreSQL 11 Beta instance to connect.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;On PostgreSQL 11 Beta instance, first thing is to recreate schema. We use pg_dump for this purpose only to copy the schema over from PostgreSQL 10 instance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ pg_dump -s&amp;nbsp; -h pg104.XXXXX.us-east-2.rds.amazonaws.com -U pgadmin benchdb &amp;gt; movies_schema.sql&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Load the schema into PostgreSQL 11 using the psql client&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ psql -h pg11from10.XXXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin -d benchdb -f movies_schema.sql&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Note you might see errors for GRANT statements if the same users are not defined in the new instance. It is okay to ignore these messages.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;ERROR:&amp;nbsp; role &quot;pg11repluser&quot; does not exist&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;We are now ready to create the subscription on PostgreSQL 11 Beta. We verify that there are no rows in this case and then confirm that we get all expected rows after the subscription is created.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from acted_in;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from movies;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from series;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; CREATE SUBSCRIPTION pg11beta1 CONNECTION &#39;host=pg104.XXXXX.us-east-2.rds.amazonaws.com dbname=benchdb user=pg11repluser password=SECRET&#39; PUBLICATION pgprod10;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;NOTICE:&amp;nbsp; created replication slot &quot;pg11beta1&quot; on publisher&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;CREATE SUBSCRIPTION&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from acted_in;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;618706&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from movies;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;183510&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from series;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;--------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;162498&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;benchdb=&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;With the new native logical replication support in PostgreSQL 10 in Amazon RDS, it is now easy to replicate the data into PostgreSQL 11 Beta instance in Amazon RDS Database Preview Environment.&amp;nbsp; It can also be used to replicate data to/from database instances deployed outside of Amazon RDS.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: &amp;quot;cambria&amp;quot; , &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 15.2px;&quot;&gt;This blog represents my own view points and not of my employer, Amazon Web Services.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: &amp;quot;cambria&amp;quot; , &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 15.2px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/42081952791330719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/42081952791330719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/42081952791330719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/42081952791330719'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2018/07/loading-data-in-postgresql-11-using.html' title='Loading data in PostgreSQL 11 Beta Using Native Logical Replication from PostgreSQL 10 in Amazon RDS'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-9183069233099891758</id><published>2018-06-08T00:00:00.000-07:00</published><updated>2018-07-26T13:45:09.025-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Setting up PostgreSQL 11 Beta 1 in Amazon RDS Database Preview Environment</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
PostgreSQL 11 Beta 1 has been out for more than couple of weeks. The best way to experience it is&amp;nbsp; to try out the new version and test drive it yourself.&lt;br /&gt;
&lt;br /&gt;
Rather than building it directly from source, I take the easy way out and deploy it in the cloud. Fortunately, it is already available in Amazon RDS Database Preview Environment.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjR6nWR9OHiW-gpP77ffp2eRuGsjlLt34bWlEgqoNMvgL6iSWvcRTrOAKLtZp_UADmsSCTU8P-NlelRn4GUMrHKGDEcZwRWV5S45rmNe4RDIh7rTV5dZZBvrEA16cJddIwBsGbfw/s1600/Screen+Shot+2018-06-07+at+10.27.56+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;734&quot; data-original-width=&quot;1600&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjR6nWR9OHiW-gpP77ffp2eRuGsjlLt34bWlEgqoNMvgL6iSWvcRTrOAKLtZp_UADmsSCTU8P-NlelRn4GUMrHKGDEcZwRWV5S45rmNe4RDIh7rTV5dZZBvrEA16cJddIwBsGbfw/s640/Screen+Shot+2018-06-07+at+10.27.56+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
For this post I am going to use the AWS CLI since it is easy to understand the command line and copy/paste it and also easier to script it for repetitive testing. To use the Database Preview environment, the endpoint has to be modified to use&amp;nbsp;&lt;span style=&quot;background-color: white; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;https://rds-preview.us-east-2.amazonaws.com/&amp;nbsp;&lt;/span&gt;instead of the default for the region.&lt;br /&gt;
&lt;br /&gt;
Because there might be multiple PostgreSQL 11 beta releases possible, it is important to understand which build version is being deployed.&amp;nbsp; I can always leave it to the default which typically would be the latest preferred version but lot of times I want to make sure on the version I am deploying. The command to get all the versions of PostgreSQL 11 is describe-db-engine-versions.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ aws rds describe-db-engine-versions --engine postgres --db-parameter-group-family postgres11 --endpoint-url&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;https://rds-preview.us-east-2.amazonaws.com/&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBEngineVersions&quot;: [&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;Engine&quot;: &quot;postgres&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBParameterGroupFamily&quot;: &quot;postgres11&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;SupportsLogExportsToCloudwatchLogs&quot;: false,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;SupportsReadReplica&quot;: true,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBEngineDescription&quot;: &quot;PostgreSQL&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;EngineVersion&quot;: &quot;11.20180419&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBEngineVersionDescription&quot;: &quot;PostgreSQL 11.20180419 (&lt;b&gt;68c23cba&lt;/b&gt;)&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;ValidUpgradeTarget&quot;: [&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;Engine&quot;: &quot;postgres&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;IsMajorVersionUpgrade&quot;: false,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;AutoUpgrade&quot;: false,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;EngineVersion&quot;: &quot;11.20180524&quot;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;},&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;Engine&quot;: &quot;postgres&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBParameterGroupFamily&quot;: &quot;postgres11&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;SupportsLogExportsToCloudwatchLogs&quot;: false,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;SupportsReadReplica&quot;: true,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBEngineDescription&quot;: &quot;PostgreSQL&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;EngineVersion&quot;: &quot;11.20180524&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;DBEngineVersionDescription&quot;: &quot;PostgreSQL 11.20180524 (&lt;b&gt;BETA1&lt;/b&gt;)&quot;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;ValidUpgradeTarget&quot;: []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;

































&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
From the above, I see there are two versions 11.20180419 and 11.20180524. The versions are based on datestamp with the description showing the tag information of the version. Since I am interested in the BETA1 version I use the version 11.20180524.&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px &#39;Helvetica Neue&#39;; color: #454545}
span.s1 {color: #e4af0a}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ aws rds create-db-instance&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--endpoint&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;https://rds-preview.us-east-2.amazonaws.com/&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;https://rds-preview.us-east-2.amazonaws.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--allocated-storage 100 --db-instance-class db.t2.small &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;--db-name benchdb&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--master-username SECRET&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--master-user-password XXXXX&amp;nbsp;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;--engine postgres&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--engine-version 11.20180524 &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;--db-instance-identifier pg11beta1&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Once deployed, I can always get the endpoint of the instance as follows:&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ aws rds describe-db-instances --endpoint=https://rds-preview.us-east-2.amazonaws.com --db-instance-identifier pg11beta1 |grep Address&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
span.s2 {font-variant-ligatures: no-common-ligatures; color: #c33720}
&lt;/style&gt;



&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Address&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;: &quot;pg11beta1.XXXXXX.us-east-2.rds-preview.amazonaws.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
In my account I have already added my client to my default security group,&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ psql -h pg11beta1.XXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin -d benchdb -c &#39;SELECT VERSION()&#39;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;version &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;




&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;PostgreSQL 11beta1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
It is hard to test a database without any data.&amp;nbsp; Normally I would just use pgbench directly on it and load data. But then I thought let me try a different way of loading data in this instance of the database similarly to how people will typically do from a different production setup. For this purpose, I will need to setup a production database before I proceed.&lt;br /&gt;
&lt;br /&gt;
Before I&amp;nbsp; create a production database instance, I first create a custom parameter group so that&amp;nbsp; I can&amp;nbsp; enable my typical settings that I use in a production database.&amp;nbsp; In the preview environment I created a&amp;nbsp; PostgreSQL 11 database family parameter group and edit the group to change some of the parameters as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;rds.logical_replication = 1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
and saved the group.&lt;br /&gt;
Next, I create my production instance using the newly created parameter group.&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px &#39;Helvetica Neue&#39;; color: #454545}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;$&amp;nbsp;&lt;/span&gt;aws rds create-db-instance&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;--allocated-storage 100 --db-instance-class db.t2.small --engine postgres --db-name benchdb --master-username pgadmin --master-user-password SECRET&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;--db-instance-identifier pg11prod&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
It is still empty so I filled it up with my production data.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ pgbench -i -s 100&amp;nbsp; -h pg11prod.XXX.us-east-2.rds-preview.amazonaws.com -U pgadmin benchdb&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, I have a typical setup with one production instance and another empty test instance. I know have to figure how to get the data into my test instance. I could always dump all data using pg_dump and restored it on the new instance but this time I am going to try logical replication.&lt;br /&gt;
&lt;br /&gt;
For setting up logical replication between two instances I first need to recreate the schema on the other instance. pg_dump provides a flag -s to just dump the schema with no data. I dump the schema from the production setup&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;





&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ pg_dump -s&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;-h pg11prod.XXXX.us-east-2.rds.amazonaws.com -U pgadmin benchdb &amp;gt; schema.txt&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
and then load the schema into my test setup&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ psql -h pg11beta1.XXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin -d benchdb -f schema.txt&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Now, I want to actually setup logical replication between the two users. For this I need a replication user. I could use the master password but that is too risky. So, I create a new user with read only privileges on the tables in the database and give it replication rights that will work in Amazon RDS.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ psql -h pg11prod.XXXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin benchdb&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; CREATE USER repluser WITH PASSWORD &#39;SECRET&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;CREATE ROLE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;


&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; GRANT rds_replication TO repluser;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;



&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;GRANT ROLE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; GRANT SELECT ON ALL TABLES IN SCHEMA public TO repluser;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;GRANT&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Next, I have to setup a&amp;nbsp; publication for all tables in the production database&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; CREATE PUBLICATION pgprod11 FOR ALL TABLES;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;CREATE PUBLICATION&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
One more thing to add here is to change the inbound rules of the security group of the production instance to allow the test instance to connect.&lt;br /&gt;
&lt;br /&gt;
On my test instance I need to create a subscription to subscribe to all changes happening on my production setup.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ psql -h pg11beta1.XXXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin benchdb&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;benchdb=&amp;gt; CREATE SUBSCRIPTION pg11beta1 CONNECTION &#39;host=pg11prod.XXXXXX.us-east-2.rds-preview.amazonaws.com dbname=benchdb user=repluser password=&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp;SECRET&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&#39; PUBLICATION pgprod11;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;NOTICE:&amp;nbsp; created replication slot &quot;pg11beta1&quot; on publisher&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;CREATE SUBSCRIPTION&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
Note if the command itself is taking a long time to execute then typically it means that it cannot connect to the production instance. Check the security group to make sure the rule to allow your test instance to connect is set properly.&amp;nbsp; If the connection is allowed then the command returns instantaneously. However, the actual data might be loading behind the scenes.&lt;br /&gt;
&lt;br /&gt;
After some time, I can see that my test instance has all the initial data from the production setup.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from pgbench_branches;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp;100&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from pgbench_history;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
(The table &lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;pgbench_history&lt;/span&gt; is typically empty after a fresh setup of pgbench)&lt;br /&gt;
&lt;br /&gt;
Now let&#39;s run application workload on our production database pg11prod&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ pgbench -c 10&amp;nbsp; -T 300 -P 10&amp;nbsp; -h pg11prod.XXXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin -U pgadmin benchdb&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the load starts (after the initial vacuum), log into the test instance and check for changes. With pgbench default test, it is easy to verify changes by counting entries in pgbench_history.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;$ psql -h pg11beta1.XXXXX.us-east-2.rds-preview.amazonaws.com -U pgadmin benchdb&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;psql (10.4 (Ubuntu 10.4-2.pgdg16.04+1), server 11beta1)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Type &quot;help&quot; for help.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from pgbench_history;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; 2211&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;benchdb=&amp;gt; select count(*) from pgbench_history;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;10484&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;(1 row)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is a simple test to see changes are being propagated from the production instance to the test instance.&lt;br /&gt;
&lt;br /&gt;
I, finally, have a logical replication using a read-only user between two PostgreSQL 11 instances in Amazon RDS Database Preview Environment.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV2UO3X2kPTwZC6IOChiPxKWXlDPRyUwzt-VcbgMTETamAP-UU8ug6IWjwgJtcr6VsKcQJd46ME2Umvz71MoqCyEfDbMC2erJz0CwCcKzlSmMve3WpE1afydAnwoPaURTeG83BfA/s1600/Screen+Shot+2018-06-07+at+10.27.16+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;743&quot; data-original-width=&quot;1600&quot; height=&quot;297&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV2UO3X2kPTwZC6IOChiPxKWXlDPRyUwzt-VcbgMTETamAP-UU8ug6IWjwgJtcr6VsKcQJd46ME2Umvz71MoqCyEfDbMC2erJz0CwCcKzlSmMve3WpE1afydAnwoPaURTeG83BfA/s640/Screen+Shot+2018-06-07+at+10.27.16+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pretty cool!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Cambria, Georgia, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 15.2px;&quot;&gt;This blog represents my own view points and not of my employer, Amazon Web Services.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
span.s2 {font-variant-ligatures: no-common-ligatures; color: #c33720}
&lt;/style&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/9183069233099891758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/9183069233099891758' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/9183069233099891758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/9183069233099891758'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2018/06/setting-up-postgresql-11-beta-1-in.html' title='Setting up PostgreSQL 11 Beta 1 in Amazon RDS Database Preview Environment'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjR6nWR9OHiW-gpP77ffp2eRuGsjlLt34bWlEgqoNMvgL6iSWvcRTrOAKLtZp_UADmsSCTU8P-NlelRn4GUMrHKGDEcZwRWV5S45rmNe4RDIh7rTV5dZZBvrEA16cJddIwBsGbfw/s72-c/Screen+Shot+2018-06-07+at+10.27.56+PM.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-1286915079060280893</id><published>2017-09-10T22:24:00.001-07:00</published><updated>2018-07-26T13:45:47.813-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Best Practices with Managed PostgreSQL in the Cloud - #pgopen2017</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Best Practices with Managed PostgreSQL in the Cloud @&amp;nbsp;Postgres Open SV 2017 (#pgopen2017)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/6wm8PYE1Im8OU5&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/secret/6wm8PYE1Im8OU5&quot; target=&quot;_blank&quot; title=&quot;Best Practices with Managed PostgreSQL in the Cloud&quot;&gt;Best Practices with Managed PostgreSQL in the Cloud&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Cambria, Georgia, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 15.2px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Cambria, Georgia, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 15.2px;&quot;&gt;This blog represents my own view points and not of my employer, Amazon Web Services.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/1286915079060280893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/1286915079060280893' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/1286915079060280893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/1286915079060280893'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2017/09/best-practices-with-managed-postgresql.html' title='Best Practices with Managed PostgreSQL in the Cloud - #pgopen2017'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-5391774913419106187</id><published>2017-03-30T10:33:00.002-07:00</published><updated>2017-03-30T10:33:57.234-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>PGConf 2017 - PostgreSQL High Availability in a Containerized World</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
My slides from today&#39;s presentation at #PGConfUS 2017 in Jersey City.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/LtqTq4l055Osbc&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
 &lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/postgresql-high-availability-in-a-containerized-world-73993378&quot; target=&quot;_blank&quot; title=&quot;PostgreSQL High Availability in a Containerized World&quot;&gt;PostgreSQL High Availability in a Containerized World&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/5391774913419106187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/5391774913419106187' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5391774913419106187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5391774913419106187'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2017/03/pgconf-2017-postgresql-high.html' title='PGConf 2017 - PostgreSQL High Availability in a Containerized World'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-52822105785901044</id><published>2016-11-16T21:00:00.000-08:00</published><updated>2016-11-16T21:00:09.519-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>PostgreSQL High Availability in a Containerized World - PGConfSV 2016</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
My slides from todays talk at PgConf SV 2016&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/BBw7tC0AV8AZTA&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/postgresql-high-availability-in-a-containerized-world&quot; target=&quot;_blank&quot; title=&quot;PostgreSQL High Availability in a Containerized World&quot;&gt;PostgreSQL High Availability in a Containerized World&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/52822105785901044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/52822105785901044' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/52822105785901044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/52822105785901044'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2016/11/postgresql-high-availability-in.html' title='PostgreSQL High Availability in a Containerized World - PGConfSV 2016'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-5418972478796827657</id><published>2016-06-30T19:33:00.000-07:00</published><updated>2016-09-08T19:37:24.295-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Hello Docker on Windows</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
NOTE: 9/8/2016: This is an older post which I wrote few &amp;nbsp;months ago but never not posted.&lt;br /&gt;
&lt;br /&gt;
After using docker on Linux for more than a &amp;nbsp;year it was finally time to try it on a different platform. Trying on docker on Windows Server 2016 TP4 was one way to try it out but the experience of that was bit more complicated. However when I heard about docker on Windows 10 I was initially surprised. Why? Well based on what I had seen and figured out that it really needed Hyper-V features to run which I assumed was only available on the Windows Server line.&lt;br /&gt;
&lt;br /&gt;
I guess I was wrong. Using Control Panel -&amp;gt; Program &amp;amp; Features -&amp;gt; Turn Windows Features On or Off , there is a feature called Hyper-V which can be turned on.&lt;br /&gt;
Now before you start searching for it and trying to turn it on wait till you read the following to save you some hassles.&lt;br /&gt;
&lt;br /&gt;
1. You need Windows 10 Pro (Sorry Windows 10 does not work)&lt;br /&gt;
2. You need a CPU which supports Virtualization and &lt;a href=&quot;http://social.technet.microsoft.com/wiki/contents/articles/1401.hyper-v-list-of-slat-capable-cpus-for-hosts.aspx&quot; target=&quot;_blank&quot;&gt;SLAT&lt;/a&gt;&amp;nbsp;aka EPT.&lt;br /&gt;
&lt;br /&gt;
With Task Manager -&amp;gt; Performance -&amp;gt; CPU it is easy to figure out if Virtualization is supported or not. But SLAT is another story. systeminfo or coreinfo is required to figure that out. You may be able to turn on some of the components of the Hyper-V on CPUs not supporting SLAT but that will not be enough.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Y_bto2_HqmPUCWcc_nDwBo98tKAj0pMvohyYjujUMsxPjlByon1BY6ZHZlZYQZYg0zTZqMa2ZRzQyRJHg4bhjMWkqYXsp0WxaFbrulKtAepDLvIb1_hDsn3fIOkyvi-UMH9Yxg/s1600/windock0.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Y_bto2_HqmPUCWcc_nDwBo98tKAj0pMvohyYjujUMsxPjlByon1BY6ZHZlZYQZYg0zTZqMa2ZRzQyRJHg4bhjMWkqYXsp0WxaFbrulKtAepDLvIb1_hDsn3fIOkyvi-UMH9Yxg/s320/windock0.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I really had to cycle through few laptops using Intel Core2 Duo and Intel Pentium chips which do support Virtualization but did not support SLAT and finally came across my dusty desktop using AMD Phenom which had Virtualization with SLAT support on it. and running Windows 10 on it.&lt;br /&gt;
&lt;br /&gt;
Of course then I applied for the Docker beta program on Windows. The invitation came yesterday and finally got a chance to download the docker binaries and install it.&lt;br /&gt;
&lt;br /&gt;
Once the installation (as Administrator of course) finished it gave the option to Launch docker and after it finished launching the daemon in the background it showed a splash image as follows:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvfD01dZoqsZ7oa6Cuvm_Dub0wusHO9VD1GutmnBAgOXZSAnP5NNlYFARe5CEG-PMyK4K2M7Jc6bCt5DfbHWV94MtsOWBdkM0rbsMqzK7CLARFTrkFGOTJdTx8byA2PYz4E7ESzA/s1600/windock1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvfD01dZoqsZ7oa6Cuvm_Dub0wusHO9VD1GutmnBAgOXZSAnP5NNlYFARe5CEG-PMyK4K2M7Jc6bCt5DfbHWV94MtsOWBdkM0rbsMqzK7CLARFTrkFGOTJdTx8byA2PYz4E7ESzA/s320/windock1.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Good job Docker on the usability to show me what to do next:&lt;br /&gt;
&lt;br /&gt;
Next I deploy an nginx server as follows&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlZr4zRe5Yd9Aaf1GrOBhyphenhyphenK5-2uqJ6nDcX0mnFcus0OxmgcAMx_S03NGOMxz0Evf7U2x6Ip0WnAmZZbVdVBy-10lOK8YOd7DgADIxUkHeP8F4TYkyU9vl5BzaY2T57YCyIxf5nPQ/s1600/windock4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlZr4zRe5Yd9Aaf1GrOBhyphenhyphenK5-2uqJ6nDcX0mnFcus0OxmgcAMx_S03NGOMxz0Evf7U2x6Ip0WnAmZZbVdVBy-10lOK8YOd7DgADIxUkHeP8F4TYkyU9vl5BzaY2T57YCyIxf5nPQ/s640/windock4.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Woha!! If it did not strike you.. I am running Linux images here on Windows!!&lt;br /&gt;
Now I can access the same in a browser as http://docker/&lt;br /&gt;
(This I &amp;nbsp;would say was a &amp;nbsp;bit of struggle since I had not read the doc properly where I was trying with http://127.0.0.1/ or http://localhost or http://LOCAL/ but only http://docker worked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNMmk7x-Z1AYziXVbH0FpFb3oTrFg4ZYsDMnntTs67o5OFjB0hp8WlAOiVwwnF-LMZs0AES6HMrTgadR_o_sewLJ-oE2Q2l3Fz7ctllvBzShRQriDCf89tsi_Jhm6xBG2L7yCtdg/s1600/windock5.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;148&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNMmk7x-Z1AYziXVbH0FpFb3oTrFg4ZYsDMnntTs67o5OFjB0hp8WlAOiVwwnF-LMZs0AES6HMrTgadR_o_sewLJ-oE2Q2l3Fz7ctllvBzShRQriDCf89tsi_Jhm6xBG2L7yCtdg/s320/windock5.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Overall very interesting and game changing for development on Windows!.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/5418972478796827657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/5418972478796827657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5418972478796827657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5418972478796827657'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2016/06/hello-docker-on-windows.html' title='Hello Docker on Windows'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Y_bto2_HqmPUCWcc_nDwBo98tKAj0pMvohyYjujUMsxPjlByon1BY6ZHZlZYQZYg0zTZqMa2ZRzQyRJHg4bhjMWkqYXsp0WxaFbrulKtAepDLvIb1_hDsn3fIOkyvi-UMH9Yxg/s72-c/windock0.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-947098070997368043</id><published>2016-05-16T11:05:00.000-07:00</published><updated>2016-05-16T11:05:08.561-07:00</updated><title type='text'>Yet another reboot of Application Architecture</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Last week I attended Redis Conf 2016 in Mission Bay Conference Center and was excited to see more than 650+ attendees discussing Redis. It is interesting that Redis has grown from a pure caching solution to now support more data use cases of their customer base.&lt;br /&gt;
&lt;br /&gt;
If we put the above in perspective we will see how applications are changing over the years.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;CHUI Era&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Years before leading to Y2K were all monolithic applications where everything was done on a single setup with people either using dump terminals or using Windows or Unix Clients to just open a telnet sessions and use a text-based interface which was often called later as &quot;ChUI&quot; - Character User Interface. Browsers were not popular but Windows was picking up and some &quot;modern&quot; applications at that point had their first Windows Fat Client but it was still all in one Windows &quot;GUI&quot; applications being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;GUI Era&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
While technically the whole decade leading to year 2000, Client-Server technologies became more popular with a centralized database and a front end in either a Windows Rich Client or Java Rich Client or Web Browser based &quot;WebUI&quot; front end. Companies like Oracle, Sun at that time made a killing selling large Centralized servers running databases with essentially a Rich Client or WebUI client accessing the central server. In the later part of the years three tier systems. However majority of the enterprise applications were still &quot;Rich Clients&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Java Era&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The era of the middleware was basically rule by Java webapp servers leading to a &quot;classic&quot; three-tier systems: Database layer, Middleware layer, Presentation layer. This is the generation that heavily started the SOA leading to APIs everywhere. Also this is the generation that lead to XML hell where everybody had to understand XML to interconnect everything. However things were still monolithic specially in the Database layer and to lesser extent on the Middleware layer. Scale was more limited to Amdhal&#39;s law. To work around some of this scaling issues, more tiers were being introduced like &quot;Caching layer&quot;, &quot;Load Proxies&quot;, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ScaleOut Era&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As databases became hard to scale on a single node, Designs started changing using new kinds of database systems to support smaller boxes leading to a new kind of designs: Sharding, Shared-Nothing, Shared Data based database systems. This was the first reboot in some sense where &quot;Eventual Consistency&quot; paradigms before more popular and applications where now being developed with these new paradigms of multi-node databases. &amp;nbsp;Applications now had to introduce new layers who has knowledge about the &quot;intelligence&quot; of the scale out databases on how to handle sharding, node reconnections, etc. CAP Theorem was more discussed than Amdhal&#39;s law. The number of tiers in such a scale out application was already approaching 10 such distinct operation tiers. There were people doing multi data centers but those were primarily for DR use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cloud Era&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
With the advent of Amazon Web Services, new refactoring of applications started primarily with the concept of multiple data centers, variable latencies between services and needing real decoupling between tiers. Earlier the tiers were more of &quot;components&quot; rather than services as the assumption was everything will be updated together. Also the notion of &quot;Change management&quot; started changing to be more continuous deployment to production. &amp;nbsp;Applications get started to get more complex as there were some services which were &quot;always&quot; production mode as they were being served from 3rd Party providers. Third party API consumption really became very popular. &amp;nbsp;This really started moving the number of tiers from somewhere around 10 &amp;nbsp;to more like 25-30 different tiers in an app.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MicroServices Era&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
With the advent of Linux containers like Docker and microservice adoption, yet another reboot of applications is happening and this time at a faster pace than before. &amp;nbsp;This is an interesting on-going era for applications. No longer a tier is a &quot;component&quot; of an application but it is more of a purpose driven &quot;service&quot; by itself. &amp;nbsp;Every service is versioned, API -accessible, fully updatable on its own without impacting the rest of the application. &amp;nbsp;This change is causing the number of tiers in a typical enterprise application to be now growing beyond 100s. I have heard some enterprises having about 300-400 microservices based tiers in thier application. Many of these microservices are 3rd party services. &amp;nbsp;There are advantages like there is no single monolithic &quot;waterfall&quot; release of the application anymore. Things that previously had taken months or years to build, can now be build in hours or days. But on the downside there are just too many moving parts in the application now. Architectural changes of your data flows and use cases are now very expensive. Pre-deployment testing becomes difficult, Canary deployments becomes necessary to avoid risks of introducing bugs and taking down the whole application. While nothing is bad in evolution, it is just that thinking of how to manage applications will have to change based on the changing landscape.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In conclusion, applications have changed over the years, adapting the changes is necessary for business to catch up to competition and still retain their technology edge in the market.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/947098070997368043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/947098070997368043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/947098070997368043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/947098070997368043'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2016/05/yet-another-reboot-of-application.html' title='Yet another reboot of Application Architecture'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-5596506502870750633</id><published>2016-01-06T03:00:00.000-08:00</published><updated>2016-01-06T09:58:38.637-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>PostgreSQL and Linux Containers: #SouthbayPUG Presentation</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It was a great to talk about Linux Containers tonight at Southbay PostgreSQL User Group at Pivotal.&lt;br /&gt;
The slides are now posted online:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/admEwkUSVXRaTW&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/jkshah/postgresql-and-linux-containers&quot; target=&quot;_blank&quot; title=&quot;PostgreSQL and Linux Containers&quot;&gt;PostgreSQL and Linux Containers&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/jkshah&quot; target=&quot;_blank&quot;&gt;Jignesh Shah&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/5596506502870750633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/5596506502870750633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5596506502870750633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5596506502870750633'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2016/01/postgresql-and-linux-containers.html' title='PostgreSQL and Linux Containers: #SouthbayPUG Presentation'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-7307541546627627614</id><published>2015-09-30T09:58:00.002-07:00</published><updated>2015-09-30T09:58:59.313-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Mirror Mirror on the wall, Where&#39;s the data? In my Vol</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
When I first started working with docker last year, there was a clear pattern already out there the docker image itself only consists of application binary (and depending on the philosophy - the entire OS libraries that are required) and all application data goes in a volume.&lt;br /&gt;
&lt;br /&gt;
Also the concept&amp;nbsp; called &quot;&lt;a href=&quot;https://medium.com/@ramangupta/why-docker-data-containers-are-good-589b3c6c749e&quot; target=&quot;_blank&quot;&gt;Data Container&lt;/a&gt;&quot; also seemed to be little&amp;nbsp;popular&amp;nbsp;at that time.&amp;nbsp; Not everyone bought into that philosophy and there were various other patterns emerging out then on how people used volumes with their docker containers.&lt;br /&gt;
&lt;br /&gt;
One of the emerging pattern was (or still is) &amp;nbsp;&quot;Data Initialization if it does not exist&quot; during container startup.&lt;br /&gt;
Let&#39;s face it, when we first start a docker container consisting of say PostgreSQL 9.4 database the volume is an empty file system. We then&amp;nbsp;do an initdb and setup a database so that it is ready to serve. &lt;br /&gt;
The simplest way is to &amp;nbsp;check if the data directory has data in it and if it does not have data, then run initdb and setup the most common best practices of the database and serve it up. &lt;br /&gt;
&lt;br /&gt;
Where&#39;s the simplest place to do this? In the entrypoint script of docker container of course.&lt;br /&gt;
&lt;br /&gt;
I did the same mistake in my jkshah/postgres:9.4 image too. In fact I still see that same pattern in the official &lt;a href=&quot;https://github.com/docker-library/postgres/blob/master/9.4/docker-entrypoint.sh#L17&quot; target=&quot;_blank&quot;&gt;postgres&lt;/a&gt; docker image also where it looks for PG_VERSION and if it does not exists then it runs initdb.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;if [ ! -s &quot;$PGDATA/PG_VERSION&quot; ]; then&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; gosu postgres initdb&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This certainly has advantages:&lt;br /&gt;
1. Very simple to code the script.&lt;br /&gt;
2. Great Out of the box experience - You start the container&amp;nbsp;up - the container sets itself up and it is ready to use.&lt;br /&gt;
&lt;br /&gt;
Lets look what happens next in real life enterprise usages. &lt;br /&gt;
&lt;br /&gt;
We got in scenarios while the applications using such&amp;nbsp;databases are&amp;nbsp;running but&amp;nbsp;they lost all data in it. Hmm what&#39;s going wrong here? The application is working fine, the database is working fine, but all data is like it was freshly deployed and not something that was running well for 3-5 months.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s look at various activities that an enterprise will typically do with such a data volume - file system on the host where&amp;nbsp;PostgreSQL containers are running.&lt;br /&gt;
1. The host location&amp;nbsp;of the volume itself will be a mounted file system coming off &amp;nbsp;SAN or some storage device.&lt;br /&gt;
2. Enterprise will be backing up that file system on periodic intervals&lt;br /&gt;
3.&amp;nbsp;On some cases they will be&amp;nbsp;restoring that file system when required.&lt;br /&gt;
4. Sometimes the backend storage may have hiccups. (No !&amp;nbsp;That does not happen :-) )&lt;br /&gt;
&lt;br /&gt;
In any of the above cases, where a mount fails or mounts a wrong file system or if the restore fails, you could end up with an empty file system for a volume path.&amp;nbsp; (Not all people had checks for this)&lt;br /&gt;
&lt;br /&gt;
Now when you start the PostgreSQL docker container on such a volume you will get a new&amp;nbsp; database fully initialized. Most&amp;nbsp;current automations that I have seen works such that in those&amp;nbsp;cases even the application will fully initialize the database with its own schema and initial data and the application moves on like&amp;nbsp;nothing is wrong here.&lt;br /&gt;
&lt;br /&gt;
In the above case it might seem that the application is working to all probes till a customer tries to login into the setup&amp;nbsp; and find that they do not exist in the system . &lt;br /&gt;
&lt;br /&gt;
For DBAs the anal rule is &quot;No Data&quot; error&amp;nbsp;is better than &quot;Wrong/Lost Data&quot; serviced out of a database (specially PostgreSQL users).&amp;nbsp;For this reason, this particular pattern of database initialization&amp;nbsp;is becoming an ANTI Pattern in my view specially for&amp;nbsp;docker containers. A better&amp;nbsp;approach is to have an entrypoint command specifically to do a setup(initialization) knowingly&amp;nbsp;and then all subsequent starts should be called with&amp;nbsp;another entrypoint command to specifically fail if it does not find the data.&lt;br /&gt;
&lt;br /&gt;
Of course again this is a philosophical view on how it&amp;nbsp;should be handled. I would love to hear what people have to say about this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/7307541546627627614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/7307541546627627614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/7307541546627627614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/7307541546627627614'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2015/09/mirror-mirror-on-wall-wheres-data-in-my.html' title='Mirror Mirror on the wall, Where&#39;s the data? In my Vol'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-3332354494187758323</id><published>2015-09-20T20:30:00.000-07:00</published><updated>2015-09-20T20:30:03.078-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Is it a privilege to run a  container in Docker?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Recently while working with various applications in a &lt;a href=&quot;https://www.docker.com/&quot; target=&quot;_blank&quot;&gt;docker&lt;/a&gt; container, we came across few containers that will not run properly unless &lt;a href=&quot;https://docs.docker.com/reference/commandline/run/&quot; target=&quot;_blank&quot;&gt;privileged mode&lt;/a&gt; is enabled. The privileged mode gives the container the same rights as host which means it can make changes on host where the container runs. (Huge difference compared to VM - Imagine your VM making changes to the hypervisor directly.)&lt;br /&gt;
&lt;br /&gt;
Of course privileged mode has its uses and I am definitely glad that it is available. However it is not a general purpose option to be used lightly. So imagine my surprise that one of the most common tools that is used in many enterprises now &lt;a href=&quot;https://www.chef.io/chef/&quot; target=&quot;_blank&quot;&gt;Chef server&lt;/a&gt; when running in a docker container also required &lt;a href=&quot;https://github.com/tmc/dockerfiles/tree/master/chef-server&quot; target=&quot;_blank&quot;&gt;privileged&lt;/a&gt; mode to run. There are various versions available but they all required the mode.&lt;br /&gt;
&lt;br /&gt;
While investigating Chef Server to see why it requires the mode I found it primarily requires it to set some ulimit parameters and a specific kernel parameter inside the container.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;sysctl -w kernel.shmmax=17179869184&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now before you say, aha simple lets change the value in the host itself and let the container pick up the value from the host itself.. Let me say been there .. it ain&#39;t gonna work.&amp;nbsp; The reason it does not work is due to how Linux namespaces work with CLONEIPC. The net result is everytime a container is created a new namespace of System V IPC is setup with the default&amp;nbsp; shmmax of 32MB.&amp;nbsp; The default will be changed in a later Linux kernel to 4GB but of course like most companies there will not be patience to wait for the Linux kernel to show up let alone a certified Linux distro for production setups.&lt;br /&gt;
&lt;br /&gt;
There are few hacks to work it out as &lt;a href=&quot;http://www.slideshare.net/jpetazzo&quot; target=&quot;_blank&quot;&gt;Jerome&lt;/a&gt; indicates in a &lt;a href=&quot;https://groups.google.com/forum/#!topic/docker-dev/HTC_q92ILZs&quot; target=&quot;_blank&quot;&gt;mailing list&lt;/a&gt;.&amp;nbsp; But of course none of them was something that was suitable.&lt;br /&gt;
&lt;br /&gt;
Now lets go back to the original command that needed to be executed which required. I have worked with those commands for years always to increase shared memory for databases that uses Sys V style of shared memory like Oracle, PostgreSQL (well till 9.2), etc.&lt;br /&gt;
&lt;br /&gt;
Guess what doing a little digging I did find PostgreSQL used as an embedded database in $CHEF_SERVER_INSTALL/embedded/bin/postgres. Checking the version of &quot;postgres&quot; binary confirmed it to be 9.2.&lt;br /&gt;
&lt;br /&gt;
Checking latest version of Chef server found it to be still using Postgres 9.2. Eventually ended up creating a custom image using Postgres 9.4 and voila got the container running without privileged mode. Thanks &lt;a href=&quot;http://rhaas.blogspot.com/2012/06/absurd-shared-memory-limits.html&quot; target=&quot;_blank&quot;&gt;Robert Haas&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It also means that as more and more PostgreSQL based containers are being used in containers, it is better to move to the latest version of PostgreSQL for a better experience.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/3332354494187758323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/3332354494187758323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3332354494187758323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3332354494187758323'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2015/09/is-it-privilege-to-run-container-in.html' title='Is it a privilege to run a  container in Docker?'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-1460479613570121052</id><published>2015-02-20T00:39:00.001-08:00</published><updated>2015-02-20T00:39:21.930-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>CentOS 7, Docker, Postgres and DVDStore kit</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Its been a long time since I have posted an entry. It has been a very busy year and more about that in a later post. Finally I had some time to try out new versions of Linux and new OSS technologies.&lt;br /&gt;
&lt;br /&gt;
I started to learn by installing the latest version of CentOS 7. CentOS closely follows RHEL 7 and coming from SLES 11 and older CentOS 6.5, I saw many new changes which are pretty interesting.&lt;br /&gt;
&lt;br /&gt;
New commands to learn immediately as I started navigating:&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;systemctl&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;firewall-cmd&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I admit that I missed my favorite files in &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/etc/init.d&lt;/span&gt; and looking at new location of &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/etc/systemd/system/multi-user.target.wants/&lt;/span&gt; will take me a while to get used to.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;firewall-cmd&lt;/span&gt; actually was more welcome considering how hard I &amp;nbsp;found to remember the exact rule syntax of &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;iptables&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
There is new Grub2 but honestly lately &amp;nbsp;I do not even worry about it (which is a good thing). Apart from that I see XFS is the new default file system and LVM now has snapshot support for Ext4 and XFS and many more.&lt;br /&gt;
&lt;br /&gt;
However the biggest draw for me was the support for Linux Containers. As a Sun alumni, I was always draw to the battle of who did containers first and no longer worry about it, but as BSD Jails progressed to Solaris Containers to now the hottest technology: Docker container, it sure has its appeal.&lt;br /&gt;
&lt;br /&gt;
In order to install docker however you need the &quot;Extras&quot; CentOS 7 repository enabled. However &amp;nbsp;docker is being updated faster so the &quot;Extras&quot; repository is getting old at 1.3 with the latest out (as of last week) is Docker 1.5. To get Docker 1.5 &amp;nbsp;you will need to enable &quot;virt7-testing&quot; repository on CentOS 7&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
I took a shortcut to just create a file &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/etc/yum.repos.d/virt7-testing.repo&lt;/span&gt; with the following contents in it.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;[virt7-testing]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;name=virt7-testing&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;enabled=1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;gpgcheck=0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then I was ready to install docker as follows&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# yum install docker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I did find that it actually does not start the daemon immediately, so using the new systemctl command I enabled &amp;nbsp;and then started the daemon&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# systemctl enable docker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# systemctl start docker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We now have the setup ready. However what good is the setup unless you have something to demonstrate quickly. This is where I see Docker winning over other container technology and probably their differentiator. There is an &quot;AppStore&quot; for the container images available to download images. Of course you need a login to access the Docker Hub as it is called at &amp;nbsp;&lt;a href=&quot;http://hub.docker.com/&quot;&gt;http://hub.docker.com&lt;/a&gt; (which is for free fortunately).&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# docker login&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To login to the hub and now you are ready to get new images.&lt;/div&gt;
&lt;div&gt;
I have uploaded two images for the demonstration for today&lt;/div&gt;
&lt;div&gt;
1. A Standard Postgres 9.4 image&lt;/div&gt;
&lt;div&gt;
2. A DVDStore benchmark application image based on kit from&amp;nbsp;&lt;a href=&quot;http://linux.dell.com/dvdstore/&quot; target=&quot;_blank&quot;&gt;http://linux.dell.com/dvdstore/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To download the images is as simple as pull&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# docker pull jkshah/postgres:9.4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# docker pull jkshah/dvdstore&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now lets see on how to deploy them.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
For PostgreSQL 9.4 since it is a database it will require storage for &quot;Persistent Data&quot; so first we make a location on the host that can be used for storing the data.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# mkdir /hostpath/pgdata&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
SELinux is enabled by default on CentOS 7 which means there is an additional step required to make the location read/write from Linux containers&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# chcon -Rt svirt_sandbox_file_t /hostpath/pgdata&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now we will create a container as a daemon which will map the container port to host port 5432 and setup a database with a username and password that we set. (Please do not use secret as password :-) )&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# docker run -d -p 5432:5432 --name postgres94 -v /hostpath/pgdata:/var/lib/postgresql/data -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=secret -t jkshah/postgres:9.4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here now if you check &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/hostpath/pgdata &lt;/span&gt;you will see the database files on the host.&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Now lets deploy an application using this database container.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# docker run -d -p 80:80 -–name dvdstore2 -–link postgres94:ds2db –-env DS2DBINIT=1 jkshah/dvdstore&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The above command starts another container based on the DVDStore image which expects a database &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ds2db&lt;/span&gt;&quot; defined which is satisfied using the link option to link the database container created earlier. The application container also intiailizes the database so it is ready to serve requests at port 80 of the host.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This opens up new avenues to now benchmark your PostgreSQL hardware easily. (Wait the load test driver code is still on Windows &amp;nbsp;:-( )&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/1460479613570121052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/1460479613570121052' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/1460479613570121052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/1460479613570121052'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2015/02/centos-7-docker-postgres-and-dvdstore.html' title='CentOS 7, Docker, Postgres and DVDStore kit'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-2036923251830396895</id><published>2013-11-22T11:13:00.000-08:00</published><updated>2013-11-22T11:13:28.926-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><title type='text'>Feedback from my sesion at PgConfEU</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I had recently done a &lt;a href=&quot;http://jkshah.blogspot.com/2013/10/my-experience-with-embedding-postgresql.html&quot; target=&quot;_blank&quot;&gt;session at PgConf.EU&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It was interesting and encouraging to see the feedback&amp;nbsp; from it.&lt;br /&gt;
Thanks to the people who took time to give the feedback. &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h1&gt;
Session feedback: My experience with embedding PostgreSQL&lt;/h1&gt;
&lt;h3&gt;
Speaker: Jignesh Shah&lt;/h3&gt;
A total of 4 feedback entries have been submitted for this session.&lt;br /&gt;
&lt;h2&gt;
Rankings&lt;/h2&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyMD0LLbpef9OaPXMV242BVA22yh512JONXNG9b_cKwAX6v-FXfsXS7Kps_Ui2B0ScJHGJidoCGYdzzZynwvk6UEZ1gmxfRDN5sHhWwlZLXt84I7A3UAQ68DWPaJIHbaH7yRw65w/s1600/feedback1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyMD0LLbpef9OaPXMV242BVA22yh512JONXNG9b_cKwAX6v-FXfsXS7Kps_Ui2B0ScJHGJidoCGYdzzZynwvk6UEZ1gmxfRDN5sHhWwlZLXt84I7A3UAQ68DWPaJIHbaH7yRw65w/s320/feedback1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;3&quot; cellspacing=&quot;0&quot; style=&quot;font-size: small;&quot;&gt;
   &lt;tbody&gt;
&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;Topic importance&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Rating&lt;/th&gt;&lt;th&gt;Count&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
(5 is highest, 1 is lowest)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_zRrdr8nxGhZCKm57GC8zuVebcf0w2c1UPaqcnzznWb4oLR-s_64KMXCiV_Xd-NH_2N4dti2yTv2uXdz-SxjIRRH36yWBm0_7ShkrdHQH-3rody7vco7KT-6npq8SxHSkxpuiZA/s1600/feedback2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_zRrdr8nxGhZCKm57GC8zuVebcf0w2c1UPaqcnzznWb4oLR-s_64KMXCiV_Xd-NH_2N4dti2yTv2uXdz-SxjIRRH36yWBm0_7ShkrdHQH-3rody7vco7KT-6npq8SxHSkxpuiZA/s320/feedback2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&amp;nbsp;&lt;/a&gt;
  &lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;3&quot; cellspacing=&quot;0&quot; style=&quot;font-size: small;&quot;&gt;
   &lt;tbody&gt;
&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Content quality&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Rating&lt;/th&gt;&lt;th&gt;Count&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
(5 is highest, 1 is lowest)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwlRuj8Lrx4TL9tb0q0mC1Wg-JmuKuccgqAa4ps5hjLGK7Nhe2IGfSnjpZmsCUuPgC31Sw3eOTh4JE-oOFBqdR_M0hxTPUwfaRsbLMleAmqnZEuExUlxqRrmgBgEl1tPJ7KjT6Ig/s1600/feedback3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwlRuj8Lrx4TL9tb0q0mC1Wg-JmuKuccgqAa4ps5hjLGK7Nhe2IGfSnjpZmsCUuPgC31Sw3eOTh4JE-oOFBqdR_M0hxTPUwfaRsbLMleAmqnZEuExUlxqRrmgBgEl1tPJ7KjT6Ig/s320/feedback3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;
  &lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;3&quot; cellspacing=&quot;0&quot; style=&quot;font-size: small;&quot;&gt;
   &lt;tbody&gt;
&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Speaker knowledge&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Rating&lt;/th&gt;&lt;th&gt;Count&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
(5 is highest, 1 is lowest)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=17085626&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqezYvF0nOj7aJ-MavJYjFS7scq8TMvf8tzXccNKCbtXjBlicFacqcuKrDf7uw01brbqVn4uErdxKKqKb67MUa2u9QutF-Tn_U4YCMe8e-23GIUBkJzRAAYZug33cf3RNPbYyseg/s1600/feedback4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqezYvF0nOj7aJ-MavJYjFS7scq8TMvf8tzXccNKCbtXjBlicFacqcuKrDf7uw01brbqVn4uErdxKKqKb67MUa2u9QutF-Tn_U4YCMe8e-23GIUBkJzRAAYZug33cf3RNPbYyseg/s320/feedback4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;3&quot; cellspacing=&quot;0&quot; style=&quot;font-size: small;&quot;&gt;
   &lt;tbody&gt;
&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;Speaker quality&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Rating&lt;/th&gt;&lt;th&gt;Count&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
(5 is highest, 1 is lowest)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Comments&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Very good presentation - IMHO please add Oracle License Costs to your slides. As on the first view - Business people wont understand that they are variable and WAY HIGHER as expected. &lt;/li&gt;
&lt;li&gt;One of the best talks this year.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/2036923251830396895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/2036923251830396895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2036923251830396895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2036923251830396895'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/11/feedback-from-my-sesion-at-pgconfeu.html' title='Feedback from my sesion at PgConfEU'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyMD0LLbpef9OaPXMV242BVA22yh512JONXNG9b_cKwAX6v-FXfsXS7Kps_Ui2B0ScJHGJidoCGYdzzZynwvk6UEZ1gmxfRDN5sHhWwlZLXt84I7A3UAQ68DWPaJIHbaH7yRw65w/s72-c/feedback1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-889123344419810667</id><published>2013-10-31T09:16:00.000-07:00</published><updated>2013-10-31T09:16:46.899-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>My experience with embedding PostgreSQL - #pgconfeu</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
At my current company, we embed PostgreSQL based technologies in 
various applications shipped as shrink-wrapped software. In this session
 we talk about the experience of embedding PostgreSQL where it is not 
directly exposed to end-user and the issues encountered on how they were
 resolved.&lt;br /&gt;
We will talk about business reasons,technical architecture of 
deployments, upgrades, security processes on how to work with embedded 
PostgreSQL databases. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;400&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/27782260&quot; width=&quot;476&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/889123344419810667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/889123344419810667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/889123344419810667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/889123344419810667'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/10/my-experience-with-embedding-postgresql.html' title='My experience with embedding PostgreSQL - #pgconfeu'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-5600366933231706299</id><published>2013-09-17T07:21:00.001-07:00</published><updated>2013-09-17T07:27:48.749-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>PostgreSQL replication? I need temp tables for my reports</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
One of the frequent things I hear that many times&amp;nbsp; PostgreSQL users avoid running PostgreSQL replication&amp;nbsp; because they want to offload reports that use temporary tables on the slaves. Since PostgreSQL replicas are pure read only, it cannot support temporary tables.&lt;br /&gt;
&lt;br /&gt;
There is one way to overcome this with postgres_fdw - PostgreSQL Foreign Data Wrapper which are improved in&lt;a href=&quot;http://jkshah.blogspot.com/2013/05/how-can-postgresql-93-beta1-help-you.html&quot; target=&quot;_blank&quot;&gt; PostgreSQL 9.3&lt;/a&gt; which is &lt;a href=&quot;http://www.postgresql.org/about/news/1481/&quot; target=&quot;_blank&quot;&gt;now released&lt;/a&gt;. &lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Create a Master-Slave setup with PostgreSQL 9.3 (with synchronous or asynchronous replication as per your needs). &lt;/li&gt;
&lt;li&gt;On the slave setup, setup another PostgreSQL 9.3 instance (with different port) with postgres_fdw and map all tables from slaves as foreign tables with same names as their remote counterparts.&lt;/li&gt;
&lt;li&gt;Run reports which requires temporary tables using this new instance&lt;/li&gt;
&lt;/ul&gt;
Of course there are few caveats for this setup&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Query plans: Currently they are still inefficient but as postgres_fdw improves, this will likely go away. Infact more usage of this use-case scenario will force it to be improved&lt;/li&gt;
&lt;li&gt;Lot of data moving: Most DW reports do read lot of rows. However by setting it up on the same server most of it are loopback and dont go on the wire outside.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;More Resources: This will do require more memory/cpu on the server but it is still cheaper since the management of such a server is still more simpler compared to other complex designs to achieve the same goal&lt;/li&gt;
&lt;/ul&gt;
I would like to hear about your experiences on the same too so feel free to send me comments.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/5600366933231706299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/5600366933231706299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5600366933231706299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/5600366933231706299'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/09/postgresql-replication-i-need-temp.html' title='PostgreSQL replication? I need temp tables for my reports'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-2323843258379077408</id><published>2013-05-21T23:28:00.000-07:00</published><updated>2013-05-22T13:42:20.938-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DataDirector"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>How to do Postgres Replication and Failover  in  VMware vFabric Data Director 2.7?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Last week VMware released vFabric Data Director 2.7. Among
the&lt;a href=&quot;https://www.vmware.com/support/datadirector/doc/vfabric-data-director-27-release-notes.html&quot; target=&quot;_blank&quot;&gt; many new features&lt;/a&gt; for various database, I wish to give a little more insight into my favorite
ones which are regarding Postgres. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;One of the big feature add from a broad perspective&amp;nbsp;is support of Postgres 9.2 based
managed database servers along with replication.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Lets look at how it is done in brief.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;First vFabric Postgres 9.2 base DBVM needs to be uploaded
into Data Director system resource pool and then converted into template. Note
this template is different from vFabric Postgres 9.2 Virtual appliance and is
available on the same location where Data Director 2.7 download exists.&amp;nbsp; Also this DBVM template is based on the latest PostgreSQL 9.2.4 core.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Next once the template is &amp;nbsp;loaded into the system resource pool it will show
up in Base DBVMs section in System-&amp;gt;Manage and Monor-&amp;gt; Templates-&amp;gt;
BaseDBVMs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Then you would&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;then &amp;nbsp;&lt;/span&gt;right
click on the base DBVM and select “Convert to Base DB Template”. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;Here you also have a new feature to add more
disks (think Tablespaces in PostgreSQL) to the template. In Data Director 2.7,
disks are added at the template level.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWIvwljebTieXiuzeFY7dTy9ytq-8BanaKElUrLqoutrzIJy0hbpbzF54tfnTbnNr5Zq8J9Wett0yaCbA1jT7P3zbGjV6qtRoquXFa01gqbwFeLUCMyIvuXWMho6onCMPxz1JCCA/s1600/dd27-pg92template.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWIvwljebTieXiuzeFY7dTy9ytq-8BanaKElUrLqoutrzIJy0hbpbzF54tfnTbnNr5Zq8J9Wett0yaCbA1jT7P3zbGjV6qtRoquXFa01gqbwFeLUCMyIvuXWMho6onCMPxz1JCCA/s640/dd27-pg92template.jpg&quot; width=&quot;624&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;
&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;This process take some time and then it should show up in
Base DB Templates. On the Base DB Template section right click on the newly
created template and select “Validate”. This one creates a test database to see
if it is successful or not before it can be rolled out to the Organizations and
Database groups . Once the validation is a success, right click and select “Assign
it to the resource bundle” and select the resource bundle that will have access
to the template or create a new resource bundle to use the template.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Note in the Resource bundle creation steps lies yet another new &amp;nbsp;way to separate out
IO on separate datastores since these may need different IO characteristics&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMg7m-GZ665K6wJIygofXq59-YHc6oExCiRUJ75bzdZEAqoeYgItxymdUyK53vBMBJrQroY2GgkAvPUmygE1ApbKhyphenhyphenPBtfag6oV1Cnaq7Xow6T6Mh8RSe50B-xkymU1L1gV2q2Eg/s1600/dd27-storageallocation.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;432&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMg7m-GZ665K6wJIygofXq59-YHc6oExCiRUJ75bzdZEAqoeYgItxymdUyK53vBMBJrQroY2GgkAvPUmygE1ApbKhyphenhyphenPBtfag6oV1Cnaq7Xow6T6Mh8RSe50B-xkymU1L1gV2q2Eg/s640/dd27-storageallocation.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
The above image shows how the various types of datastores for your OS, Backup, Data and Logs (Data can be multiple location if you need multiple tablespaces)&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Now all the Orgs/Database groups using the resource bundle
will see the new vPostgres 9.2 template.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;In a sample demo I created a database called MyDB using&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;few wizard questions.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Now on the DB List we do a right click on the database to
create more replicas &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNrK9WqPo5bLSPSsRAMPN6xPy8jCshv04x2cxgqs5cQc8_V4LyOnYmBlQKZXDRu0yN79QzaQm0ws3CIH30iUTgGkN-Rd7QcuruTUB_q25F8wlF6mrSFDBShTxlgWynzWICuuXpig/s1600/dd27-pgslavecreate.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;481&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNrK9WqPo5bLSPSsRAMPN6xPy8jCshv04x2cxgqs5cQc8_V4LyOnYmBlQKZXDRu0yN79QzaQm0ws3CIH30iUTgGkN-Rd7QcuruTUB_q25F8wlF6mrSFDBShTxlgWynzWICuuXpig/s640/dd27-pgslavecreate.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Couple of more quick wizard questions and a slave is ready. Similarly you can create more slaves of the same master. Now actually behind the scenes it does all the plumbing right from creating a new clone virtual machine from the master and setting it up using standard PostgreSQL replication on the newly created VM but from a user point of view it it is all point , click and done.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;The database dashboard also has a new portlet to show bit more information about the replication.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi9sWfrRPINND-N0k7v_eZe9TEHgxLkd81cUeAqKwDFP8i2t2prhx2tZdjyZjngRQEycT1iI6xMeS1eYCsF8tL-Gq6G69kgSnui0FzzBmgYSV9lw6W1Upgk62XnU-e08zWe8BfyQ/s1600/dd27-repportlet.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi9sWfrRPINND-N0k7v_eZe9TEHgxLkd81cUeAqKwDFP8i2t2prhx2tZdjyZjngRQEycT1iI6xMeS1eYCsF8tL-Gq6G69kgSnui0FzzBmgYSV9lw6W1Upgk62XnU-e08zWe8BfyQ/s640/dd27-repportlet.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;To make a slave as a new master and it will give an option to &amp;nbsp;move all the other
slaves to the new master select as follows:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnEqWcvgnd3EkrdjfVvBkZLx2X-Puzm-MnCLxZAZY91jR2gXovgeWbabKIXn8LEarQKELYKW-WBLqLCnH5l9OlbbFq9_9jAq3ceHvOxCo3tqX8HHOYZ3PLotSjvOcRJwh7V4MwWw/s1600/dd27-pgslavepromote.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;209&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnEqWcvgnd3EkrdjfVvBkZLx2X-Puzm-MnCLxZAZY91jR2gXovgeWbabKIXn8LEarQKELYKW-WBLqLCnH5l9OlbbFq9_9jAq3ceHvOxCo3tqX8HHOYZ3PLotSjvOcRJwh7V4MwWw/s640/dd27-pgslavepromote.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ4Ps7X44-miipatZwk9FUs4v0qwEcg3C_OtD6Ch65qcjySn3LO5clMqJTx13l9493BCnZhVCS_yBA2Q-tffjtCPJGzzEiH8K9sPprgH1gAOCQoQF4M5lLVpO9Ugk6htdoA9f9Xw/s1600/dd27-pgslavepromote2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ4Ps7X44-miipatZwk9FUs4v0qwEcg3C_OtD6Ch65qcjySn3LO5clMqJTx13l9493BCnZhVCS_yBA2Q-tffjtCPJGzzEiH8K9sPprgH1gAOCQoQF4M5lLVpO9Ugk6htdoA9f9Xw/s320/dd27-pgslavepromote2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;After completion of the failover, the status shown will be similar to:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZ645i8QgqKGsjjWtiNLKJPLftdl7GtgqxV6kaqCa5vn_jBe7kY5QrJNPjhyphenhyphentVw9mtXDYMWIbXQraePV7Oeb06rXYNytyiVls5yXl5tM3ZXAXQGEJnh2AcZSKLa4PjCOuVyF5Qw/s1600/dd27-pgnewmaster.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZ645i8QgqKGsjjWtiNLKJPLftdl7GtgqxV6kaqCa5vn_jBe7kY5QrJNPjhyphenhyphentVw9mtXDYMWIbXQraePV7Oeb06rXYNytyiVls5yXl5tM3ZXAXQGEJnh2AcZSKLa4PjCOuVyF5Qw/s640/dd27-pgnewmaster.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Calibri;&quot;&gt;Where the original slave replica is now redirected to the
new Master. The original master is kept as it is for Port-Mortem or other
activities. This also gives a way to use it as new use cases like separating a
slave for test purpose/DR purpose or separating “mirrors” etc. Best of all it
uses all Standard PostgreSQL replication.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
Of course one of the thing that it does not do is re-purpose the original Master as a slave of the new Master. For more details there is a perfect opportunity to find &lt;a href=&quot;http://www.pgcon.org/2013/schedule/events/564.en.html&quot; target=&quot;_blank&quot;&gt;Heikki Linnakangas from VMware&amp;nbsp;at PGCon&lt;/a&gt; in Ottawa this week and ask him the question after his session .. WHY??? :-)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 10pt;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/2323843258379077408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/2323843258379077408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2323843258379077408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2323843258379077408'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/05/how-to-do-postgres-replication-and.html' title='How to do Postgres Replication and Failover  in  VMware vFabric Data Director 2.7?'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWIvwljebTieXiuzeFY7dTy9ytq-8BanaKElUrLqoutrzIJy0hbpbzF54tfnTbnNr5Zq8J9Wett0yaCbA1jT7P3zbGjV6qtRoquXFa01gqbwFeLUCMyIvuXWMho6onCMPxz1JCCA/s72-c/dd27-pg92template.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-563666955225192461</id><published>2013-05-14T00:33:00.000-07:00</published><updated>2013-05-14T00:33:41.312-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>How can PostgreSQL 9.3 beta1 help you?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://www.postgresql.org/about/news/1463/&quot; target=&quot;_blank&quot;&gt;PostgreSQL 9.3 beta1&lt;/a&gt; is now available. Giving early access to software is always a good idea to test out evolutionary, revolutionary, radical ideas because unless it is field tested, it has not gone through its trial&amp;nbsp;by fire to be proven gold.&lt;br /&gt;
&lt;br /&gt;
There are many new changes introduced&amp;nbsp;in PostgreSQL 9.3 beta1 and I do have few favorites in them. &lt;br /&gt;
&lt;br /&gt;
For example Disk page checksums to detect filesystem failures. In fact this would allow VMware to use the now standard disk page checksum instead of a custom feature. This highly debated feature is required to identify silent bit corruptions (or deter malicious ones).&amp;nbsp;I have been told in talks with database administrators (not just PostgreSQL DBAs) that typically in a year they would face one such incident atleast where one of the disk would show such a bit rot which goes unnoticed without any instrumentations to catch it.&lt;br /&gt;
&lt;br /&gt;
Another change that goes in the right direction is how PostgreSQL maps the shared memory. This small change now allows no kernel changes to be done to start the database with a bigger shared buffer pool. This now allows one less cookbook step to be done to get the database working. Considering that in this cloud world where there are 100,000 VMs running databases one less step is a huge increase in productivity&amp;nbsp;since this step actually required privileges higher than the database instance owner.&lt;br /&gt;
&lt;br /&gt;
Yet another favorite feature is the custom background workers. This new mechanism is certainly a popular one in our team at VMware where are using it heavily to move some of the changes that we had done into custom background workers deployed as extensions and allowed us to align with core PostgreSQL and extra features enabled as extensions as needed.&lt;br /&gt;
&lt;br /&gt;
Next I want to talk of three features : Writeable Foreign Tables and pgsql Foreign Data Wrapper and Automatically update&amp;nbsp;VIEWs&amp;nbsp;together. These features on its own itself are very useful and generic. However when used together it actually opens new possibilities using multiple federated PostgreSQL databases shards with single logical view of the whole database as one. Quite Powerful if you think about it. I hope to see people trying these fundamental features into new derived features now made possible.&lt;br /&gt;
&lt;br /&gt;
Also new JSON functions help PostgreSQL on its evolution to be the Data Platform not just for relational data but also document data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While I have barely scratched the surface of&lt;a href=&quot;http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#Updatable_Views&quot; target=&quot;_blank&quot;&gt; all the new features&lt;/a&gt; in PostgreSQL 9.3 beta1, I am already excited with this release and the possibilities I see going forward&amp;nbsp; in the world of data.&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/563666955225192461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/563666955225192461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/563666955225192461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/563666955225192461'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/05/how-can-postgresql-93-beta1-help-you.html' title='How can PostgreSQL 9.3 beta1 help you?'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-6782821177618122739</id><published>2013-03-13T14:16:00.002-07:00</published><updated>2013-03-13T14:16:38.025-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DataDirector"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>PyPgDay 2013 - HA / Replication for PostgreSQL in Virtualized Environments</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
My presentation at PyPgDay 2013 on HA and Replication for PostgreSQL on Virtualized Environments&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.slideshare.net/jkshah/py-pg-day2013harep&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaNrXfpeNsWUmy-Eo60NT0MF5xEnevV0eJaTCaI1RxfMjdvQLcuijoWKTCiK9em56b6gFJ3-XAwVw_7FqJl48AQyEhf9UEJWvrd_g-Vj6ue2Iu38OzwUgMnJPkPnn0de96zBn4RQ/s400/PyPGDay2013_HA_Rep.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/6782821177618122739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/6782821177618122739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/6782821177618122739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/6782821177618122739'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2013/03/pypgday-2013-ha-replication-for.html' title='PyPgDay 2013 - HA / Replication for PostgreSQL in Virtualized Environments'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaNrXfpeNsWUmy-Eo60NT0MF5xEnevV0eJaTCaI1RxfMjdvQLcuijoWKTCiK9em56b6gFJ3-XAwVw_7FqJl48AQyEhf9UEJWvrd_g-Vj6ue2Iu38OzwUgMnJPkPnn0de96zBn4RQ/s72-c/PyPGDay2013_HA_Rep.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-2479140319488975784</id><published>2012-11-15T00:23:00.000-08:00</published><updated>2012-11-15T00:23:01.099-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>A Step Forward</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Recently I upgraded my&amp;nbsp; &quot;lab&quot; setup.&lt;br /&gt;
Now it currently looks as follows:&lt;br /&gt;
&lt;br /&gt;
* 2x&amp;nbsp; Physical Hosts running vSphere 5.1 &lt;br /&gt;
* Controlled by vCenter 5.1 Server Appliance backed with embedded Postgres Database instance&lt;br /&gt;
* Monitored by vCenter Operations which has two embedded Postgres Database instance in the vApp&lt;br /&gt;
*To monitor my VMs, I installed&amp;nbsp; vFabric Hyperic 5.0 also running embedded Postgres Database VM.&lt;br /&gt;
* DBaaS provider vFabric Data Director 2.5 also installed with its embedded Postgres database instance running too&lt;br /&gt;
&lt;br /&gt;
Now for my VMs: &lt;br /&gt;
* vFabric Postgres 9.1.6.0 VM&amp;nbsp;&amp;nbsp; integrated with vSphere HA&lt;br /&gt;
* My Linux Developer VM running PostgreSQL 9.2.1&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;If you get everything you need with Postgres, why even QA for other databases anymore?&lt;br /&gt;
&lt;a href=&quot;http://blogs.vmware.com/vfabric/2012/11/why-hyperic-is-going-to-support-postgresql-only-as-a-backend-database.html&quot; target=&quot;_blank&quot;&gt;Well vFabric Hyperic took the first bold step forward&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/2479140319488975784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/2479140319488975784' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2479140319488975784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/2479140319488975784'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2012/11/a-step-forward.html' title='A Step Forward'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-6760845307462449660</id><published>2012-10-10T16:37:00.000-07:00</published><updated>2012-10-10T16:38:33.729-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>SFPUG Oct 2012: DVDStore Benchmark and PostgreSQL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I presented the DVDStore Benchmark at SFPUG yesterday night.&lt;br /&gt;
The presentation is available at &lt;a href=&quot;http://portal.sliderocket.com/vmware/SFPUG_DVDStore&quot; target=&quot;_blank&quot;&gt;http://portal.sliderocket.com/vmware/SFPUG_DVDStore&lt;/a&gt;&lt;br /&gt;
The video is located at &lt;a href=&quot;http://www.justin.tv/sfpug/b/335041570&quot; target=&quot;_blank&quot;&gt;http://www.justin.tv/sfpug/b/335041570&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;561&quot; scrolling=&quot;no&quot; src=&quot;http://app.sliderocket.com:80/app/fullplayer.aspx?id=90a7809b-63ed-434f-ae95-b79750c5610b&quot; width=&quot;700&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/6760845307462449660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/6760845307462449660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/6760845307462449660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/6760845307462449660'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2012/10/sfpug-oct-2012-dvdstore-benchmark-and.html' title='SFPUG Oct 2012: DVDStore Benchmark and PostgreSQL'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17085626.post-3963257241655515432</id><published>2012-09-19T12:42:00.000-07:00</published><updated>2012-09-19T21:44:43.872-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="VMware"/><title type='text'>PGOpen 2012: DVDStore Benchmark and PostgreSQL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
My slides to go with the Demo I did with&lt;a href=&quot;http://postgresopen.org/2012/schedule/presentations/128/&quot; target=&quot;_blank&quot;&gt; DVDStore Benchmark and PostgreSQL&lt;/a&gt; session.&lt;br /&gt;
&lt;a href=&quot;http://portal.sliderocket.com/vmware/PGOpen2012_DVDStore&quot;&gt;http://portal.sliderocket.com/vmware/PGOpen2012_DVDStore&lt;/a&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;593&quot; scrolling=&quot;no&quot; src=&quot;http://app.sliderocket.com:80/app/fullplayer.aspx?id=f7cebdd5-59d7-4dac-a400-f82118ae26c1&quot; width=&quot;739&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Other session presentations are available at https://wiki.postgresql.org/wiki/Postgres_Open_2012&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jkshah.blogspot.com/feeds/3963257241655515432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17085626/3963257241655515432' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3963257241655515432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17085626/posts/default/3963257241655515432'/><link rel='alternate' type='text/html' href='http://jkshah.blogspot.com/2012/09/pgopen-2012-dvdstore-benchmark-and.html' title='PGOpen 2012: DVDStore Benchmark and PostgreSQL'/><author><name>Jignesh Shah</name><uri>http://www.blogger.com/profile/04788601733978561726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>