[GRASS-dev] [GRASS-SVN] r73995 - grass/trunk/scripts/v.db.addtable

Huidae Cho grass4u at gmail.com
Tue Jan 29 07:12:12 PST 2019


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 <markus.metz.giswork at gmail.com>
wrote:

>
>
> On Sun, Jan 27, 2019 at 11:21 AM Markus Metz <
> markus.metz.giswork at gmail.com> wrote:
> >
> >
> >
> > On Sat, Jan 26, 2019 at 2:50 PM Huidae Cho <grass4u at gmail.com> 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 <neteler at osgeo.org>
> wrote:
> > >>
> > >> Hi,
> > >>
> > >> On Tue, Jan 22, 2019 at 3:51 AM <svn_grass at osgeo.org> 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
> > > grass-dev at lists.osgeo.org
> > > 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20190129/f5e01523/attachment.html>


More information about the grass-dev mailing list