<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Geocode function fails when calling normalize_address</TITLE>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.8112.16448"></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>Rob,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>Regarding your normalize issue, it's probably one record 
causing it.  I thought we fixed some of these issues in 2.0.1 and 2.1.0SVN 
so you might want to upgrade your script to the 2.0.1 -- there is an upgrade 
script you can use packaged in the tar ball.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>If that still doesn't fix your issue, look for variables often 
found in regex expressions in your address (things like (, )  and . for 
example might be throwing it off and we might not be escaping right.  Hard 
to tell which one until your narrow down to the one bad 
record.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>You might have to run each update as a single to see which one 
fails</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>Couple of other tips</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>1) you don't want to geocode 100K records all at once since it 
has to complete as a single transaction.  You'll need to do it in 
batches.  We use pgScript for that batch processing so we can just run 
in a pgAdmin window.  though any scripting tool of your choice would 
do.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial><A 
href="http://www.postgresonline.com/journal/archives/181-pgAdmin-pgScript.html">http://www.postgresonline.com/journal/archives/181-pgAdmin-pgScript.html</A></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>2) Don't do <FONT color=#000000>(geocode(address)).*<FONT 
size=3 face="Times New Roman">   That often calls geocode for each 
field in output so would slow down your processing n fold (e.g. you'd have like 
5 calls instead of 1)</FONT></FONT></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>You really want to do geocode(address) As geo</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>(geo).geomout etc. </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012>See example in docs -- <A 
href="http://www.postgis.org/documentation/manual-svn/Geocode.html">http://www.postgis.org/documentation/manual-svn/Geocode.html</A>  
-- we do a left join to guarantee that even if no records returned for an 
address, we can stamp the address as attempted with a -1 rating</SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012>I think we thought about 
this after we wrote the book :(</SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>-- SHAMELESS PLUG STARTS HERE ---</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>On bright side, we just signed our contract for Second Edition of 
PostGIS in Action and have started writing it :)  more on that later.  
that will cover newer enhancements in geocoder, raster, topology, PostGIS 
2.0-2.1 (basically at least 2.0 and 2.1 changes)  and PostgreSQL 9.1-9.3 
</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>We'll be posting the new Table Of Contents soon here, and let people 
know when they can start purchasing</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial><A 
href="http://www.postgis.us">http://www.postgis.us</A></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>Those who buy the new book, is our understanding, will automatically 
get electronic copies of the first edition, so even if you buy early, you'll get 
our drafts as we write them and also have the older book to work 
with.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>-- END SHAMELESS PLUG</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial>3) The book was written before we introduced the limit, so 
again look at:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><A 
href="http://www.postgis.org/documentation/manual-svn/Geocode.html">http://www.postgis.org/documentation/manual-svn/Geocode.html</A><FONT 
size=2 face=Arial>  (feature is available in 2.0 as 
well)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>Use: geocode(address,1)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>for faster performance and then you don't even need the DISTINCT ON 
since you'll get back at most one answer and the best one.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>Hope that helps,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial>Leo and Regina</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial><A 
href="http://www.postgis.us">http://www.postgis.us</A></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=618372819-06092012><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV><BR>
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>
<FONT size=2 face=Tahoma><B>From:</B> 
postgis-users-bounces@postgis.refractions.net 
[mailto:postgis-users-bounces@postgis.refractions.net] <B>On Behalf Of 
</B>Robert_Clift@doh.state.fl.us<BR><B>Sent:</B> Thursday, September 06, 2012 
1:01 PM<BR><B>To:</B> postgis-users@postgis.refractions.net<BR><B>Subject:</B> 
[postgis-users] Geocode function fails when 
callingnormalize_address<BR></FONT><BR></DIV>
<DIV></DIV><!-- Converted from text/rtf format -->
<P><FONT size=2 face=Arial>Hi All:</FONT> </P>
<P><FONT size=2 face=Arial>My batch geocode of 100K records is failing with 
error messages that refer to an operand in the normalize_address function. I 
based my single-column UPDATE on the multi-column example in "PostGIS In Action" 
and have tweaked the syntax only to achieve slight variation in the error 
message.</FONT></P>
<P><FONT size=2 face=Arial>The query is something like:</FONT> </P><BR>
<P><FONT size=2 face=Arial>UPDATE respondents_addr SET the_geom =</FONT> 
<BR><FONT size=2 face=Arial>   g.geomout</FONT> <BR><FONT size=2 
face=Arial>   FROM (SELECT DISTINCT ON (respondent, s_year) 
respondent, s_year, (geocode(address)).*</FONT> <BR><FONT size=2 
face=Arial>      FROM respondents_addr As ra</FONT> 
<BR><FONT size=2 face=Arial>         
WHERE ra.address IS NOT NULL</FONT> <BR><FONT size=2 
face=Arial>      ORDER BY respondent, s_year, rating) 
As g</FONT> <BR><FONT size=2 face=Arial>      WHERE 
g.respondent = respondents_addr.respondent</FONT> <BR><FONT size=2 
face=Arial>      AND g.s_year = 
respondents_addr.s_year;</FONT> </P><BR>
<P><FONT size=2 face=Arial>The most frequent error text is:</FONT> </P><BR>
<P><FONT size=2 face=Arial>ERROR:  invalid regular expression: quantifier 
operand invalid</FONT> <BR><FONT size=2 face=Arial>CONTEXT:  PL/pgSQL 
function "normalize_address" line 386 at assignment</FONT> <BR><FONT size=2 
face=Arial>PL/pgSQL function "geocode" line 10 at assignment</FONT> <BR><FONT 
size=2 face=Arial>********** Error **********</FONT> <BR><FONT size=2 
face=Arial>ERROR: invalid regular expression: quantifier operand invalid</FONT> 
<BR><FONT size=2 face=Arial>SQL state: 2201B</FONT> <BR><FONT size=2 
face=Arial>Context: PL/pgSQL function "normalize_address" line 386 at 
assignment</FONT> <BR><FONT size=2 face=Arial>PL/pgSQL function "geocode" line 
10 at assignment</FONT> </P><BR>
<P><FONT size=2 face=Arial>Also the query runs for more than an hour, (xp box 
with 3.5 GB ram, PosgreSQL 9.0.6, PostGIS 2.0.0 (might be the problem?)) and no 
matter how the error message changes it always references the normalization 
function, so I tried:</FONT></P><BR>
<P><FONT size=2 face=Arial>SELECT (normalize_address(address)).* FROM 
respondents_addr WHERE address IS NOT NULL LIMIT 1000;</FONT> </P><BR>
<P><FONT size=2 face=Arial>With the LIMIT it ran quickly and returned the 
expected result, so I tried:</FONT> </P><BR>
<P><FONT size=2 face=Arial>SELECT (normalize_address(address)).* FROM 
respondents_addr WHERE address IS NOT NULL LIMIT 5000;</FONT> </P><BR>
<P><FONT size=2 face=Arial>Bumping the LIMIT up reproduced the error from the 
geocode attempts. I'd say "aha" if only I knew why.</FONT> <BR><FONT size=2 
face=Arial>I checked the list archives and googled several combinations of words 
from the error but alas, to no avail. I suspect that I've either repeated a 
simple syntax error or that my setup is somehow off -- any help will be 
appreciatedand I might as well close with results of 
PostGIS_full_version():</FONT></P><BR>
<P><FONT size=2 face=Arial>POSTGIS="2.0.0 r9605" GEOS="3.3.3-CAPI-1.7.4" 
PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.0, released 2011/12/29" 
LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER</FONT></P><BR>
<P><FONT size=2 face=Arial>Thank you,</FONT> <BR><FONT size=2 
face=Arial>Rob</FONT> </P></BODY></HTML>