---
name: "v.db.connect"
section: "1grass"
platform: "linux"
package: "grass-doc"
version: "8.4.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/v.db.connect"
---

# v.db.connect(1grass)

Prints/sets DB connection for a vector map to attribute table.

## NAME

**v.db.connect**  - Prints/sets DB connection for a vector map to attribute table.

## KEYWORDS

vector, attribute table, database, layer

## SYNOPSIS

**v.db.connect**\
 **v.db.connect --help**\
 **v.db.connect** \[-**pgcd**\] **map**=*name*  \[**driver**=*name*\]   \[**database**=*name*\]   \[**table**=*name*\]   \[**key**=*name*\]   \[**layer**=*string*\]   \[**separator**=*character*\]   \[--**overwrite**\]  \[--**help**\]  \[--**verbose**\]  \[--**quiet**\]  \[--**ui**\]

### Flags:

- **-p**

  Print all map connection parameters and exit

- **-g**

  Print all map connection parameters in shell script style and exit\
   Format: layer\[/layer name\] table key database driver

- **-c**

  Print types/names of table columns for specified layer and exit

- **-d**

  Delete connection for certain layer (not the table)

- **--overwrite**

  Allow output files to overwrite existing files

- **--help**

  Print usage summary

- **--verbose**

  Verbose module output

- **--quiet**

  Quiet module output

- **--ui**

  Force launching GUI dialog

### Parameters:

- **map**=*name* **\[required\]**

  Name of vector map\
   Or data source for direct OGR access

- **driver**=*name*

  Name of database driver\
   Options: *dbf, mysql, odbc, ogr, pg, sqlite*\
   Default: *sqlite*

- **database**=*name*

  Name of database\
   Default: *$GISDBASE/$LOCATION\_NAME/$MAPSET/sqlite/sqlite.db*

- **table**=*name*

  Name of attribute table

- **key**=*name*

  Name of key column\
   Must refer to an integer column\
   Default: *cat*

- **layer**=*string*

  Layer number or name\
   Format: layer number\[/layer name\]\
   Default: *1*

- **separator**=*character*

  Field separator for shell script style output\
   Special characters: pipe, comma, space, tab, newline\
   Default: *pipe*

## DESCRIPTION

*v.db.connect* prints or sets database connection for a vector map. The user can add or remove link to attribute table on the certain layer.

## NOTE

Connection information (driver, database, table, key) is stored for each map, in the file\

```
<database>/<project>/<mapset>/vector/<map>/dbln
```

If parameters for database connection are already set with db.connect, they are taken as default values and do not need to be specified each time.

When printing database connection (*p* or *g* flag) the parameter *layer* is ignored, i.e. **all** connections are printed to the output.

**Attention:** Removing a vector map will also delete all tables linked to it! If you use v.db.connect to link further tables to your map, it is advisable to make a copy from those tables first and connect the copied tables to the vector map (see also v.overlay).

## EXAMPLE

Note: The default database backend setting is SQLite.

### Print database connection

Print all database connection parameters for vector map.\

```
v.db.connect -p map=roads
```

Print column types and names of table linked to vector map.\

```
v.db.connect -c map=roads
```

### Connect vector map to database (DBF driver)

Connect vector map to DBF table without or with variables.\

Using default DB connection:\

```
v.db.connect map=vectormap table=table
```

Using hardcoded path to DBF directory (not recommended):\
\

```
v.db.connect map=vectormap table=table \
             database=/home/user/grassdata/spearfish60/PERMANENT/dbf
```

Using variable as DBF directory definition, single quotes must be used:\
\

```
v.db.connect map=vectormap table=table \
             database=’$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/’
```

Connect vector map layer 2 and key ID to database with variables (note: if needed, single quotes must be used for the *database* parameter):\

```
v.db.connect map=vectormap table=table layer=2 key=ID
```

### Connect vector map to database (SQLite driver)

Very similar to DBF driver example above.\

```
db.connect driver=sqlite database=’$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db’
db.tables -p
v.db.connect map=vectormap table=table driver=sqlite \
             database=’$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db’
v.db.connect -p map=vectormap
```

### Connect vector map to database (MySQL driver)

```
# note: connection which requires password
db.connect driver=mysql database="host=dbserver.foo.org,dbname=my_database"
db.login user=joshua [password=xxx]
# ... or enter password interactively.
db.tables -p
# connect external table to layer 2:
v.db.connect map=my_map table=my_mysql_table key=baz layer=2
v.db.connect -p my_map
```

### Connect vector map to database (PostgreSQL driver)

```
# note: connection without password being asked
v.db.connect map=vectormap table=table layer=1 key=oid driver=pg \
             database="host=myserver.itc.it,dbname=mydb,user=name" \
             table=mytable key=id
```

### Store geometry in GRASS but attributes in PostgreSQL

This example illustrates a mixed data storage with possibility to update attributes in an external PostgreSQL database:\

```
# Check current settings for attribute storage:
db.connect -p
# Import table from PostgreSQL to new map
# (NOTE: output map name needs to be different from table name in
#        case that GRASS is connected to PostgreSQL):
v.in.db driver=pg database="host=localhost,dbname=meteo" \
        table=mytable x=lon y=lat key=cat out=mytable
v.db.connect map=mytable -p
# Cancel table connection between map and attribute table:
v.db.connect map=mytable -d
v.db.connect map=mytable -p
# Drop table which was replicated due to import:
db.tables -p
echo "DROP TABLE mytable" | db.execute
db.tables -p
# reconnect map to table in PostgreSQL:
v.db.connect map=mytable driver=pg database="host=localhost,dbname=meteo" \
        table=mytable key=cat
# Now the geometry is stored in GRASS while the attributes are stored
# in PostgreSQL.
```

An alternative is to create a "view" of only ID, x, y \[,z\] columns and to use v.in.db on this view, then connect the original table to the geometry. This will be faster if the original table is very large.

### Store geometry in GRASS but attributes in PostGIS

This example illustrated a mixed data storage with possibility top update attributes in external PostGIS database:\

```
# Check current settings for attribute storage:
db.connect -p
# Import table from PostGIS to new map
# (NOTE: output map name needs to be different from table name in
#        case that GRASS is connected to PostGIS):
v.in.db driver=pg database="host=localhost,dbname=meteo" \
        table=mytable x="x(geom)" y="y(geom)" key=cat out=mytable
v.db.connect map=mytable -p
# Cancel table connection between map and attribute table:
v.db.connect map=mytable -d
v.db.connect map=mytable -p
# Drop table which was replicated due to import:
db.tables -p
echo "DROP TABLE mytable" | db.execute
db.tables -p
# reconnect map to table in PostGIS:
v.db.connect map=mytable driver=pg database="host=localhost,dbname=meteo" \
        table=mytable key=cat
# Now the geometry is stored in GRASS while the attributes are stored
# in PostGIS.
```

## SEE ALSO

*db.connect,* *db.copy,* *db.tables,* *v.db.addtable,* *v.db.droptable,* *v.db.addcolumn,* *v.db.dropcolumn,* *v.external,* *v.in.db,* *v.overlay*

*GRASS SQL interface*

## AUTHOR

Radim Blazek, ITC-Irst, Trento, Italy

## SOURCE CODE

Available at: v.db.connect source code (history)

Accessed: Monday Feb 24 17:51:12 2025

Main index \| Vector index \| Topics index \| Keywords index \| Graphical index \| Full index

© 2003-2025 GRASS Development Team, GRASS GIS 8.4.1 Reference Manual
