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).
DBMI-PostgreSQL driver error: Unable to create index: create unique index tmp2_cat on tmp2 ( cat ) ERROR: relation "tmp2_cat" already exists DBMI-PostgreSQL driver error: Unable to create index: create unique index tmp2_cat on tmp2 ( cat ) ERROR: relation "tmp2_cat" already exists WARNING: Cannot create index here WARNING: Values in column <cat> will be overwritten Reading features... 100% Updating database... 100% Huidae On Tue, Jan 29, 2019 at 9:37 AM Markus Metz <[email protected]> wrote: > > > On Sun, Jan 27, 2019 at 11:21 AM Markus Metz < > [email protected]> wrote: > > > > > > > > On Sat, Jan 26, 2019 at 2:50 PM Huidae Cho <[email protected]> wrote: > > > > > > Markus, > > > > > > 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). > > What do you mean with "failed"? v.db.connect will issue a warning if it > can not create an index but finish successfully. > > Markus M > > >> 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? > > > > > > Before this commit: > > > 1. v.db.addtable creates unique index > > > 2. v.db.connect tries to create unique index again ==> fatal error > > > > > > After this commit: > > > 1. v.db.addtable doesn't create unique index > > > 2. v.db.connect creates unique index > > > > > > Probably, it should be: > > > 1. v.db.addtable should create unique index > > > 2. v.db.connect shouldn't try to create unique index? Just "connect"... > > > > 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. > > > > Markus M > > > > > > > > Regards, > > > Huidae > > > > > > On Sat, Jan 26, 2019 at 7:39 AM Markus Neteler <[email protected]> > wrote: > > >> > > >> Hi, > > >> > > >> On Tue, Jan 22, 2019 at 3:51 AM <[email protected]> wrote: > > >> > > > >> > Author: hcho > > >> > Date: 2019-01-21 18:51:33 -0800 (Mon, 21 Jan 2019) > > >> > New Revision: 73995 > > >> > > > >> > Modified: > > >> > grass/trunk/scripts/v.db.addtable/v.db.addtable.py > > >> > Log: > > >> > 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) > > >> > > > >> > Modified: grass/trunk/scripts/v.db.addtable/v.db.addtable.py > > >> > =================================================================== > > >> > --- grass/trunk/scripts/v.db.addtable/v.db.addtable.py 2019-01-21 > 22:37:59 UTC (rev 73994) > > >> > +++ grass/trunk/scripts/v.db.addtable/v.db.addtable.py 2019-01-22 > 02:51:33 UTC (rev 73995) > > >> > @@ -139,16 +139,6 @@ > > >> > except CalledModuleError: > > >> > grass.fatal(_("Unable to create table <%s>") % table) > > >> > > > >> > - # create index, see db/driver/*/index.c > > >> > - if driver != "dbf": > > >> > - sql = "CREATE UNIQUE INDEX %s_%s ON %s (%s)" % (table, > key, table, key) > > >> > - try: > > >> > - grass.run_command('db.execute', > > >> > - database=database, > driver=driver, sql=sql) > > >> > - except: > > >> > - grass.warning(_("Unable to create index on table > <%s>") % table) > > >> > - pass > > >> > - > > >> > # connect the map to the DB: > > >> > if schema: > > >> > table = '{schema}.{table}'.format(schema=schema, > table=table) > > >> > > >> just a conceptual question: > > >> ... are we sure that this index creation removal never leads to a > > >> table without index? > > >> > > >> Markus > > > > > > > > > > > > -- > > > Huidae Cho, Ph.D., GISP, PE (MD), CFM, M.ASCE > > > Open Source GIS Developer, GRASS GIS Development Team > > > _______________________________________________ > > > grass-dev mailing list > > > [email protected] > > > https://lists.osgeo.org/mailman/listinfo/grass-dev > -- Huidae Cho, Ph.D., GISP, PE (MD), CFM, M.ASCE Open Source GIS Developer, GRASS GIS Development Team
_______________________________________________ grass-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/grass-dev
