<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Open Enterprise: The PostgreSQL Open Source Database Blog from EnterpriseDB</title>
	<atom:link href="http://blogs.enterprisedb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.enterprisedb.com</link>
	<description>Commentary, tutorials, and announcements surrounding PostgreSQL, Postgres Plus, and open source.</description>
	<lastBuildDate>Mon, 13 May 2013 14:50:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PostgreSQL at the Federal Level: Lessons of Success</title>
		<link>http://blogs.enterprisedb.com/2013/05/07/postgresql-at-the-federal-level-lessons-of-success/</link>
		<comments>http://blogs.enterprisedb.com/2013/05/07/postgresql-at-the-federal-level-lessons-of-success/#comments</comments>
		<pubDate>Tue, 07 May 2013 17:08:27 +0000</pubDate>
		<dc:creator>Mike Pedone</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/?p=1727</guid>
		<description><![CDATA[I last wrote on this blog about hardware innovation driving up the cost of Oracle licenses. Because the computing power of a commodity server is soaring, so is the cost of Oracle licenses due to that company’s pricing policies. This has worked out well for us, as government agencies have been turning to PostgreSQL to [...]]]></description>
			<content:encoded><![CDATA[<p>I last <a href="http://blogs.enterprisedb.com/2013/03/19/hardware-upgrades-drive-feds-to-enterprisedb/" target="_blank">wrote on this blog</a> about hardware innovation driving up the cost of Oracle licenses. Because the computing power of a commodity server is soaring, so is the cost of Oracle licenses due to that company’s pricing policies. This has worked out well for us, as government agencies have been turning to PostgreSQL to replace Oracle in growing numbers. But there’s more to that mass migration story than hardware, and today I want to share a glimpse into what some of these agencies experience when turning to us to help them achieve success with PostgreSQL.</p>
<p>Let’s start with slashing database costs by over 90 percent, a scenario documented by a division within the federal government that is charged with evaluating enterprise technologies.</p>
<p>This particular client was exploring a cost-efficient solution for one of its organizations that needed to cut costs but not adversely affect its mission, which meant finding an open source database solution with equivalent or better features than its current, money-eating solution. After evaluating a few alternatives, including MySQL and Oracle, the organization conducting the study found that EnterpriseDB’s <a href="http://www.enterprisedb.com/products-services-training/products/postgres-plus-advanced-server" target="_self">Postgres Plus Advanced Server </a>provided the best performance while significantly cutting costs. When comparing Postgres Plus Advanced Server to Oracle, there was a staggering cost reduction of over 90 percent. Our solution also significantly ranked better on cost and performance than MySQL and a couple of other open source solutions.</p>
<p>We have other terrific stories to tell in the government sector, though as those of you who do business with the feds know well, naming the actual characters is rarely possible. There are a couple of agencies frequently referenced as PostgreSQL users, such as the Federal Aviation Administration (FAA), the US State Department and the National Weather Service. Suffice to say there are plenty of agencies that use PostgreSQL, many of which look to us to provide support and training for their deployments of community PostgreSQL or our own Postgres Plus Advanced Server.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/05/07/postgresql-at-the-federal-level-lessons-of-success/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PgLife Is Now Live</title>
		<link>http://blogs.enterprisedb.com/2013/05/06/pglife-is-now-live/</link>
		<comments>http://blogs.enterprisedb.com/2013/05/06/pglife-is-now-live/#comments</comments>
		<pubDate>Mon, 06 May 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/05/06/pglife-is-now-live/</guid>
		<description><![CDATA[
 
New Postgres users are often confused by the variety of activities in the Postgres community.  Even us old-timers can be overwhelmed in monitoring the Postgres community.  To meet these two needs, I have created a website called PgLife which dynamically displays the current activity in each of the community areas:  email, development, blogging, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#May_6_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#May_6_2013"> </a></p>
<p>New Postgres users are often confused by the variety of activities in the Postgres community.  Even us old-timers can be overwhelmed in monitoring the Postgres community.  To meet these two needs, I have created a website called <a class="major" style="text-decoration: underline" href="http://pglife.momjian.us/">PgLife</a> which dynamically displays the current activity in each of the community areas:  email, development, blogging, media, news, events, and <a class="txt2html" style="text-decoration: none" href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> chat.  I am hopeful people will find this useful in understanding the<br />
Postgres community, and in increasing their involvement.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/05/06/pglife-is-now-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9.3 Release Notes Ready for Beta</title>
		<link>http://blogs.enterprisedb.com/2013/05/03/9-3-release-notes-ready-for-beta/</link>
		<comments>http://blogs.enterprisedb.com/2013/05/03/9-3-release-notes-ready-for-beta/#comments</comments>
		<pubDate>Fri, 03 May 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/05/03/9-3-release-notes-ready-for-beta/</guid>
		<description><![CDATA[
 
I have completed the 9.3 release notes so they are ready for beta release.  They will be regularly updated until 9.3 final.
Post a Comment
]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#May_3_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#May_3_2013"> </a></p>
<p>I have completed the <a class="major" style="text-decoration: underline" href="http://www.postgresql.org/docs/devel/static/release-9-3.html">9.3 release notes</a> so they are ready for beta release.  They will be regularly updated until 9.3 final.</p>
<p><a href="http://momjian.us/main/comment_item.html?/main/blogs/pgblog.html/May_3_2013#disqus_thread">Post a Comment</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/05/03/9-3-release-notes-ready-for-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Starting on 9.3 Release Notes</title>
		<link>http://blogs.enterprisedb.com/2013/04/12/starting-on-9-3-release-notes/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/12/starting-on-9-3-release-notes/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/12/starting-on-9-3-release-notes/</guid>
		<description><![CDATA[
 
With our final 9.3 commit-fest almost complete, and few 9.3 open items, I have been asked to start on the 9.3 release notes.  I have blogged about
this process in the past (1, 2), so I will not bore you with the details.  I expect to be done in a week.
Post a Comment
]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_12_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_12_2013"> </a></p>
<p>With our final 9.3 <a class="txt2html" style="text-decoration: none" href="https://commitfest.postgresql.org/action/commitfest_view?id=17">commit-fest</a> almost complete, and few <a class="txt2html" style="text-decoration: none" href="https://wiki.postgresql.org/wiki/PostgreSQL_9.3_Open_Items">9.3 open items</a>, I have been <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/message-id/3738.1365694054@sss.pgh.pa.us">asked</a> to start on the 9.3 release notes.  I have blogged about<br />
this process in the past (<a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2012.html#May_3_2012">1</a>, <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2012.html#May_10_2012">2</a>), so I will not bore you with the details.  I expect to be done in a week.</p>
<p><a href="http://momjian.us/main/comment_item.html?/main/blogs/pgblog.html/April_12_2013#disqus_thread">Post a Comment</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/12/starting-on-9-3-release-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matching Server and Client Constraints</title>
		<link>http://blogs.enterprisedb.com/2013/04/11/matching-server-and-client-constraints/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/11/matching-server-and-client-constraints/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/11/matching-server-and-client-constraints/</guid>
		<description><![CDATA[
 
Postgres supports all the SQL-standard constraint types, e.g. UNIQUE, CHECK.  These work fine at the server level:

CREATE TABLE ledger (id SERIAL, balance NUMERIC(10,2) CHECK (balance &#62; 0));

INSERT INTO ledger VALUES (DEFAULT, -2.00);
ERROR:  new row for relation "ledger" violates check constraint "ledger_balance_check"
DETAIL:  Failing row contains (1, -2.00).

Continue Reading »
]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_11_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_11_2013"> </a></p>
<p>Postgres supports all the SQL-standard <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/ddl-constraints.html">constraint types,</a> e.g. UNIQUE, CHECK.  These work fine at the server level:</p>
<blockquote>
<pre class="quote_explicit">CREATE TABLE ledger (id SERIAL, balance NUMERIC(10,2) <strong>CHECK (balance &gt; 0)</strong>);

INSERT INTO ledger VALUES (DEFAULT, -2.00);
ERROR:  new row for relation "ledger" violates <strong>check constraint</strong> "ledger_balance_check"
DETAIL:  Failing row contains (1, -2.00).</pre>
</blockquote>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_11_2013">Continue Reading »</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/11/matching-server-and-client-constraints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic Columns</title>
		<link>http://blogs.enterprisedb.com/2013/04/10/dynamic-columns/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/10/dynamic-columns/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/10/dynamic-columns/</guid>
		<description><![CDATA[
 
SQL has never been good at handling dynamic columns ? it can easily process tables with a fixed number of columns, but dynamic column handling has always been a challenge.  (Dynamic columns are often used to implement user-defined fields.)  One approach has been to define columns for every possible value that might be stored [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_10_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_10_2013"> </a></p>
<p>SQL has never been good at handling dynamic columns ? it can easily process tables with a fixed number of columns, but dynamic column handling has always been a challenge.  (Dynamic columns are often used to implement user-defined fields.)  One approach has been to define columns for every possible value that might be stored in a row;  this leads to sparse tables containing mostly NULL values.  Because Postgres stores NULL values in a <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/storage-page-layout.html">single bit</a>, there is little overhead to this approach.  However, it is hard to call these dynamic columns since every new column requires an <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/sql-altertable.html">ALTER TABLE &#8230; ADD COLUMN</a> command.</p>
<p>Another approach is to use <a class="txt2html" style="text-decoration: none" href="http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model">entity/attribute/value</a> layout, where each value is stored in its own row.  This obviously increases storage requirements, has <a class="txt2html" style="text-decoration: none" href="http://stackoverflow.com/questions/5106335/how-to-design-a-database-for-user-defined-fields">performance challenges</a>, and adds <a class="txt2html" style="text-decoration: none" href="http://pratchev.blogspot.com/2010/07/refactoring-entity-attribute-value.html">complexity</a> to SQL queries.</p>
<p>Fortunately, Postgres has various options to efficiently handle dynamic columns.  The simplest solution is <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/arrays.html">arrays</a> which allow multiple values of the same data type to be stored in a single field.  This assumes that the values are independent, or that their ordinal position in the array is sufficiently meaningful.</p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_10_2013">Continue Reading »</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/10/dynamic-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pg_Upgrade Now Handles Invalid Indexes</title>
		<link>http://blogs.enterprisedb.com/2013/04/09/pg_upgrade-now-handles-invalid-indexes/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/09/pg_upgrade-now-handles-invalid-indexes/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/09/pg_upgrade-now-handles-invalid-indexes/</guid>
		<description><![CDATA[
 
In December, I reported that a bug had been discovered in how pg_upgrade handled invalid indexes, and that the next release of pg_upgrade
would throw an error if invalid indexes were found;  that release happened in February.  In an easily-overlooked development, last week&#8217;s
security release changed pg_dump so it now skips dumping invalid indexes.  This allows [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_9_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_9_2013"> </a></p>
<p>In <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2012.html#December_14_2012">December,</a> I reported that a bug had been discovered in how <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/pgupgrade.html">pg_upgrade</a> handled invalid indexes, and that the next release of pg_upgrade<br />
would throw an error if invalid indexes were found;  that release happened in <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/release-9-2-3.html">February</a>.  In an easily-overlooked development, last week&#8217;s<br />
<a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2013.html#April_8_2013_2">security release</a> changed <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/app-pgdump.html">pg_dump</a> so it now skips dumping invalid indexes.  This allows the most recent version of pg_upgrade to upgrade clusters with invalid indexes, rather than throwing an error.<br />
<a href="http://momjian.us/main/comment_item.html?/main/blogs/pgblog.html/April_9_2013#disqus_thread">Post a Comment</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/09/pg_upgrade-now-handles-invalid-indexes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Partial Indexes</title>
		<link>http://blogs.enterprisedb.com/2013/04/08/partial-indexes/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/08/partial-indexes/#comments</comments>
		<pubDate>Mon, 08 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/08/partial-indexes/</guid>
		<description><![CDATA[
 
Having covered expression indexes, I want to cover another index feature - partial indexes.  Partial indexes allow you to create an index on part of a table.  Why would you want to do that -

index only frequently-accessed values, allowing smaller index files
avoid indexing common values, which are unlikely to be useful in an index
smaller [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_8_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_8_2013"> </a></p>
<p>Having covered <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2013.html#April_6_2013">expression indexes</a>, I want to cover another index feature - <a class="major" style="text-decoration: underline" href="http://www.postgresql.org/docs/9.2/static/indexes-partial.html">partial indexes</a>.  Partial indexes allow you to create an index on <em>part</em> of a table.  Why would you want to do that -</p>
<ul>
<li>index only frequently-accessed values, allowing smaller index files</li>
<li>avoid indexing common values, which are unlikely to be useful in an index</li>
<li>smaller index files allow faster index traversal and improve index caching</li>
<li>avoid <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2012.html#July_9_2012">index insertion overhead</a> for non-indexed values</li>
<li>constrain uniqueness to a subset of table rows</li>
</ul>
<p>People usually don&#8217;t use expression or partial indexes initially, but there are certainly some use-cases that can only be solved with these index features.</p>
<p><a href="http://momjian.us/main/comment_item.html?/main/blogs/pgblog.html/April_8_2013">View or Post Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/08/partial-indexes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twenty-One Hours to Exploit</title>
		<link>http://blogs.enterprisedb.com/2013/04/08/twenty-one-hours-to-exploit/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/08/twenty-one-hours-to-exploit/#comments</comments>
		<pubDate>Mon, 08 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/08/twenty-one-hours-to-exploit/</guid>
		<description><![CDATA[
 
You probably heard about the important Postgres security releases (FAQ) last week, but maybe you thought it was mostly a theoretical threat.  Well, the Schemaverse game author left a non-upgraded server open to the Internet to see how long it would take to be infected &#8211; turns out it took a sobering
21 hours.  Hopefully [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_8_2013_2"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_8_2013_2"> </a></p>
<p>You probably heard about the important Postgres <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/about/news/1456/">security releases</a> (<a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/support/security/faq/2013-04-04/">FAQ</a>) last week, but maybe you thought it was mostly a theoretical threat.  Well, the <a class="txt2html" style="text-decoration: none" href="https://schemaverse.com/">Schemaverse</a> game author left a non-upgraded server open to the Internet to see how long it would take to be infected &#8211; turns out it took a sobering<br />
<a class="txt2html" style="text-decoration: none" href="http://schemaverse.tumblr.com/post/47312545952/the-schemaverse-was-hacked">21 hours</a>.  Hopefully this gets everyone&#8217;s attention on the need to upgrade.</p>
<p><a href="http://momjian.us/main/comment_item.html?/main/blogs/pgblog.html/April_8_2013_2#disqus_thread">Post a Comment</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/08/twenty-one-hours-to-exploit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expression Indexes</title>
		<link>http://blogs.enterprisedb.com/2013/04/06/expression-indexes/</link>
		<comments>http://blogs.enterprisedb.com/2013/04/06/expression-indexes/#comments</comments>
		<pubDate>Sat, 06 Apr 2013 12:00:00 +0000</pubDate>
		<dc:creator>Bruce Momjian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.enterprisedb.com/2013/04/06/expression-indexes/</guid>
		<description><![CDATA[
 
Having covered virtual columns recently, I wanted to cover one additional type of stored value, expression indexes.  Unlike virtual columns, which are computed on each access, expression indexes are stored in index files, allowing rapid access.  Let&#8217;s look at some examples, building on the customer table and fullname function created in my previous blog entry:

CREATE INDEX [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_6_2013"></a></p>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_6_2013"> </a></p>
<p>Having covered <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2013.html#April_1_2013">virtual columns</a> recently, I wanted to cover one additional type of stored value, <a class="txt2html" style="text-decoration: none" href="http://www.postgresql.org/docs/9.2/static/indexes-expressional.html">expression indexes</a>.  Unlike virtual columns, which are computed on each access, expression indexes are stored in index files, allowing rapid access.  Let&#8217;s look at some examples, building on the <em>customer</em> table and <em>fullname</em> function created in my previous <a class="txt2html" style="text-decoration: none" href="http://momjian.us/main/blogs/pgblog/2013.html#April_1_2013">blog entry</a>:</p>
<blockquote>
<pre class="quote_explicit">CREATE INDEX i_customer_lastname ON customer (<strong>lastname</strong>);

CREATE INDEX i_customer_concat ON customer ((<strong>firstname || ' ' || lastname</strong>));

CREATE INDEX i_customer_fullname ON customer (<strong>fullname(customer)</strong>);</pre>
</blockquote>
<p><a href="http://momjian.us/main/blogs/pgblog/2013.html#April_6_2013">Continue Reading »</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.enterprisedb.com/2013/04/06/expression-indexes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
