# OpenStreetMap Database Summary and Operations Guide

## Current Database State

- Database name: `planet`
- User: `osmadmin`
- Content: Partial world data, including France, Italy, and possibly other European countries
- Notable points: Eiffel Tower (Paris), Colosseum (Rome), detailed data including small businesses

## Connecting to the Database

To connect to the database using psql:

```bash
psql -d planet -U osmadmin
```

## Importing New Data

### Single File Import

To import a single .osm.pbf file:

```bash
osm2pgsql -d planet -U osmadmin -a --slim --drop --hstore --multi-geometry -C 28000 -W --number-processes 8 /path/to/your/new_file.osm.pbf
```

Explanation of options:
- `-d planet`: Database name
- `-U osmadmin`: Database user
- `-a`: Append mode (adds to existing data)
- `--slim`: Memory-efficient mode for large imports
- `--drop`: Drops temporary tables after import
- `--hstore`: Stores all tags in an hstore column
- `--multi-geometry`: Allows for multi-polygon geometries
- `-C 28000`: Sets cache size to 28GB (adjust based on available RAM)
- `-W`: Uses disk for temporary storage
- `--number-processes 8`: Enables parallel processing (adjust based on CPU cores)

### Batch Import Script

For importing multiple files, create a shell script named `import_osm.sh`:

```bash
#!/bin/bash
FILES="/home/ed/share/map/extract/pbf/*.osm.pbf"
for f in $FILES
do
  echo "Processing $f"
  osm2pgsql -d planet -U osmadmin -a --slim --drop --hstore --multi-geometry -C 28000 -W --number-processes 8 "$f"
done
echo "All files processed. Running VACUUM ANALYZE."
psql -d planet -U osmadmin -c "VACUUM ANALYZE;"
```

Make the script executable and run it:

```bash
chmod +x import_osm.sh
./import_osm.sh
```

This script will process all .osm.pbf files in the specified directory and optimize the database afterward.

## Post-Import Optimization

After importing data, always run:

```sql
VACUUM ANALYZE;
```

This optimizes the database for better query performance.

## Useful Queries for Data Verification

1. Count total points:
   ```sql
   SELECT COUNT(*) FROM planet_osm_point;
   ```

2. Search for specific locations:
   ```sql
   SELECT osm_id, name, ST_AsText(ST_Transform(way, 4326)) AS lonlat_location
   FROM planet_osm_point 
   WHERE name ILIKE '%eiffel%' 
   LIMIT 5;
   ```

3. Check data extent:
   ```sql
   SELECT ST_AsText(ST_Envelope(ST_Collect(way))) AS bounding_box 
   FROM planet_osm_point;
   ```

Remember to adjust file paths, database name, and user as necessary for your specific setup.


```
planet=# \d planet_osm_point

                      Table "public.planet_osm_point"

       Column       |         Type         | Collation | Nullable | Default 

--------------------+----------------------+-----------+----------+---------

 osm_id             | bigint               |           |          | 
 access             | text                 |           |          | 
 addr:housename     | text                 |           |          | 
 addr:housenumber   | text                 |           |          | 
 addr:interpolation | text                 |           |          | 
 admin_level        | text                 |           |          | 
 aerialway          | text                 |           |          | 
 aeroway            | text                 |           |          | 
 amenity            | text                 |           |          | 
 area               | text                 |           |          | 
 barrier            | text                 |           |          | 
 bicycle            | text                 |           |          | 
 brand              | text                 |           |          | 
 bridge             | text                 |           |          | 
 boundary           | text                 |           |          | 
 building           | text                 |           |          | 
 capital            | text                 |           |          | 
 construction       | text                 |           |          | 
 covered            | text                 |           |          | 
 culvert            | text                 |           |          | 
 cutting            | text                 |           |          | 
 denomination       | text                 |           |          | 
 disused            | text                 |           |          | 
 ele                | text                 |           |          | 
 embankment         | text                 |           |          | 
 foot               | text                 |           |          | 
 generator:source   | text                 |           |          | 
 harbour            | text                 |           |          | 
 highway            | text                 |           |          | 
 historic           | text                 |           |          | 
 horse              | text                 |           |          | 
 intermittent       | text                 |           |          | 
 junction           | text                 |           |          | 
 landuse            | text                 |           |          |
 layer              | text                 |           |          | 
 leisure            | text                 |           |          | 
 lock               | text                 |           |          | 
 man_made           | text                 |           |          | 
 military           | text                 |           |          | 
 motorcar           | text                 |           |          | 
 name               | text                 |           |          | 
 natural            | text                 |           |          | 
 office             | text                 |           |          | 
 oneway             | text                 |           |          | 
 operator           | text                 |           |          | 
 place              | text                 |           |          | 
 population         | text                 |           |          | 
 power              | text                 |           |          | 
 power_source       | text                 |           |          | 
 public_transport   | text                 |           |          | 
 railway            | text                 |           |          | 
 ref                | text                 |           |          | 
 religion           | text                 |           |          | 
 route              | text                 |           |          | 
 service            | text                 |           |          | 
 shop               | text                 |           |          | 
 sport              | text                 |           |          | 
 surface            | text                 |           |          | 
 toll               | text                 |           |          | 
 tourism            | text                 |           |          | 
 tower:type         | text                 |           |          | 
 tunnel             | text                 |           |          | 
 water              | text                 |           |          | 
 waterway           | text                 |           |          | 
 wetland            | text                 |           |          | 
 width              | text                 |           |          | 
 wood               | text                 |           |          | 
 z_order            | integer              |           |          | 
 tags               | hstore               |           |          |
 way                | geometry(Point,3857) |           |          | 

Indexes:

    "planet_osm_point_osm_id_idx" btree (osm_id)

    "planet_osm_point_way_idx" gist (way)

Triggers:

    planet_osm_point_osm2pgsql_valid BEFORE INSERT OR UPDATE ON planet_osm_point FOR EACH ROW EXECUTE FUNCTION planet_osm_point_osm2pgsql_valid()

```