<div dir="ltr"><div dir="ltr"><div>You're right. It was a warning with PostgresSQL error messages (attached below), not a fatal error. But I don't think there should be any warning (or PostgreSQL errors) because the user didn't do anything wrong here (v.edit map tool=create; v.db.addtable).</div><div><br></div><div>DBMI-PostgreSQL driver error:<br>Unable to create index: create unique index tmp2_cat on tmp2 ( cat )<br>ERROR:  relation "tmp2_cat" already exists<br><br><br>DBMI-PostgreSQL driver error:<br>Unable to create index: create unique index tmp2_cat on tmp2 ( cat )<br>ERROR:  relation "tmp2_cat" already exists<br><br><br>WARNING: Cannot create index<br>here<br>WARNING: Values in column <cat> will be overwritten<br>Reading features...<br> 100%<br>Updating database...<br> 100%<br><br></div><div>Huidae<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail-m_1043517737519856425gmail_attr">On Tue, Jan 29, 2019 at 9:37 AM Markus Metz <<a href="mailto:markus.metz.giswork@gmail.com" target="_blank">markus.metz.giswork@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br>On Sun, Jan 27, 2019 at 11:21 AM Markus Metz <<a href="mailto:markus.metz.giswork@gmail.com" target="_blank">markus.metz.giswork@gmail.com</a>> wrote:<br>><br>><br>><br>> On Sat, Jan 26, 2019 at 2:50 PM Huidae Cho <<a href="mailto:grass4u@gmail.com" target="_blank">grass4u@gmail.com</a>> wrote:<br>> ><br>> > Markus,<br>> ><br><div>> > If there is a linked table, v.db.addtable stops in line 106. If not, this script doesn't create a unique index and calls v.db.connect. v.db.connect adds a db link in line 317 and creates a unique index (db_create_index2) in line 334 if linking was successful. SQLite didn't complain when both modules created the same unique index, but PostgreSQL failed in v.db.connect (2nd time creating the same unique index). <br></div><div><br></div><div>What do you mean with "failed"? v.db.connect will issue a warning if it can not create an index but finish successfully.</div><div><br></div><div>Markus M<br></div><div><br></div><div>>> Not sure which code was added first/later. I think it's more of how we design both modules. v.db.connect will fail if we try to link a table with a unique index. Isn't v.db.connect supposed to "just" connect a table to a layer (without creating any database objects like index)? Which module should be responsible for creating unique indices?</div>> ><br>> > Before this commit:<br>> > 1. v.db.addtable creates unique index<br>> > 2. v.db.connect tries to create unique index again ==> fatal error<br>> ><br>> > After this commit:<br>> > 1. v.db.addtable doesn't create unique index<br>> > 2. v.db.connect creates unique index<br>> ><br>> > Probably, it should be:<br>> > 1. v.db.addtable should create unique index<br>> > 2. v.db.connect shouldn't try to create unique index? Just "connect"...<br>><br>> Yes, this is the preferred solution. Consider v.db.connect -d followed by v.db.connect, i.e. disconnecting a table and then reconnecting the same table: in this case v.db.connect should also fail with PostgreSQL. IMHO, a unique index should only be created when the table is created.<br>><br>> Markus M<br>><br>> ><br>> > Regards,<br>> > Huidae<br>> ><br>> > On Sat, Jan 26, 2019 at 7:39 AM Markus Neteler <<a href="mailto:neteler@osgeo.org" target="_blank">neteler@osgeo.org</a>> wrote:<br>> >><br>> >> Hi,<br>> >><br>> >> On Tue, Jan 22, 2019 at 3:51 AM <<a href="mailto:svn_grass@osgeo.org" target="_blank">svn_grass@osgeo.org</a>> wrote:<br>> >> ><br>> >> > Author: hcho<br>> >> > Date: 2019-01-21 18:51:33 -0800 (Mon, 21 Jan 2019)<br>> >> > New Revision: 73995<br>> >> ><br>> >> > Modified:<br>> >> >    grass/trunk/scripts/v.db.addtable/<a href="http://v.db.addtable.py" target="_blank">v.db.addtable.py</a><br>> >> > Log:<br>> >> > v.db.addtable: Do not create unique index from this script; v.db.connect will try to create it again causing some drivers to fail (PostgreSQL)<br>> >> ><br>> >> > Modified: grass/trunk/scripts/v.db.addtable/<a href="http://v.db.addtable.py" target="_blank">v.db.addtable.py</a><br>> >> > ===================================================================<br>> >> > --- grass/trunk/scripts/v.db.addtable/<a href="http://v.db.addtable.py" target="_blank">v.db.addtable.py</a>  2019-01-21 22:37:59 UTC (rev 73994)<br>> >> > +++ grass/trunk/scripts/v.db.addtable/<a href="http://v.db.addtable.py" target="_blank">v.db.addtable.py</a>  2019-01-22 02:51:33 UTC (rev 73995)<br>> >> > @@ -139,16 +139,6 @@<br>> >> >          except CalledModuleError:<br>> >> >              grass.fatal(_("Unable to create table <%s>") % table)<br>> >> ><br>> >> > -        # create index, see db/driver/*/index.c<br>> >> > -        if driver != "dbf":<br>> >> > -            sql = "CREATE UNIQUE INDEX %s_%s ON %s (%s)" % (table, key, table, key)<br>> >> > -            try:<br>> >> > -                grass.run_command('db.execute',<br>> >> > -                                  database=database, driver=driver, sql=sql)<br>> >> > -            except:<br>> >> > -                grass.warning(_("Unable to create index on table <%s>") % table)<br>> >> > -                pass<br>> >> > -<br>> >> >      # connect the map to the DB:<br>> >> >      if schema:<br>> >> >          table = '{schema}.{table}'.format(schema=schema, table=table)<br>> >><br>> >> just a conceptual question:<br>> >> ... are we sure that this index creation removal never leads to a<br>> >> table without index?<br>> >><br>> >> Markus<br>> ><br>> ><br>> ><br>> > --<br>> > Huidae Cho, Ph.D., GISP, PE (MD), CFM, M.ASCE<br>> > Open Source GIS Developer, GRASS GIS Development Team<br>> > _______________________________________________<br>> > grass-dev mailing list<br>> > <a href="mailto:grass-dev@lists.osgeo.org" target="_blank">grass-dev@lists.osgeo.org</a><br>> > <a href="https://lists.osgeo.org/mailman/listinfo/grass-dev" target="_blank">https://lists.osgeo.org/mailman/listinfo/grass-dev</a></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail-m_1043517737519856425gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><span><div><div dir="ltr">Huidae Cho, Ph.D., GISP, PE (MD), CFM, M.ASCE<br>Open Source GIS Developer, GRASS GIS Development Team</div></div></span></div></div></div></div></div></div></div></div>