[GRASS-user] Workaround for temporary table with SQL keywords as column names

Dear all,

I am trying to transform a polygon layer to lines with a command like:

v.to.lines input=country_borders output=country_borders_lines --overwrite

This command fails because GRASS tries to create a temporary table whose column names are SQL keywords:

···

DBMI-PostgreSQL driver error:

Unable to execute:

CREATE TABLE country_borders_tmp_1513280_2 (cat integer,left integer,right integer)

ERROR: syntax error at or near “left”

LINE 1: … TABLE country_borders_tmp_1513280_2 (cat integer,left integ…

^

For Postgres the correct command would have to be:

CREATE TABLE country_borders_tmp_1513280_2 (cat integer,“left” integer,“right” integer);

But could be different for other DBMS. In general it is not a good idea to use SQL keywords to name objects in a relational database.

To the question: is there a workaround for this problem? Can GRASS be instructed to not use SQL keywords as column names? Or somehow create valid SQL queries, for instance using double quotes?

Thank you.

Luís

Sent with ProtonMail Secure Email.

Hi Luí­s,

On Thu, Nov 4, 2021 at 12:52 PM Luí­s Moreira de Sousa via grass-user <grass-user@lists.osgeo.org> wrote:

To the question: is there a workaround for this problem? Can GRASS be instructed to not use SQL keywords as column names? Or somehow create valid SQL queries, for instance using double quotes?

Not an overall solution, but v.to.lines module/tool is written Python, so adding an option which would be a prefix for names for all new columns would be fairly straightforward.

https://github.com/OSGeo/grass/blob/main/scripts/v.to.lines/v.to.lines.py

The SQL keywords issue is not resolved, but a couple things here and there could make it less of an issue. You can see part of the discussion in #653:

https://github.com/OSGeo/grass/commit/ff33a47ec7608d3be7116df11de8b0b4b186c654

Best,
Vaclav