diff --git a/bin/osmosis/bin/osmosis b/bin/osmosis/bin/osmosis new file mode 100755 index 0000000..22bf268 --- /dev/null +++ b/bin/osmosis/bin/osmosis @@ -0,0 +1,94 @@ +#!/bin/sh + +# Config files can define several variables used throughout this script. +# JAVACMD - The java command to launch osmosis. +# JAVACMD_OPTIONS - The options to append to the java command, typically used to modify jvm settings such as max memory. +# OSMOSIS_OPTIONS - The options to apply to all osmosis invocations, typically used to add plugins or make quiet operation the default. + +if [ -f /etc/osmosis ] ; then + . /etc/osmosis +fi + +if [ -f "$HOME/.osmosis" ] ; then + . "$HOME/.osmosis" +fi + +if [ -z "$JAVACMD" ] ; then + # No JAVACMD provided in osmosis config files, therefore default to java + JAVACMD=java +fi + +## resolve links - $0 may be a link to application +PRG="$0" + +# if started without absolute path, but from PATH environment +if [ ! -s "$PRG" ] ; then + PRG=`which $PRG` +fi + +# need this for relative symlinks +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi +done + +if [ "x$1x" = "xx" ] || echo "$@" | grep -q -e '--help' ; then +cat < \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi +done + +# make it fully qualified +saveddir=`pwd` +MYAPP_HOME=`dirname "$PRG"`/.. +MYAPP_HOME=`cd "$MYAPP_HOME" && pwd` +cd "$saveddir" + +# Build up the classpath of required jar files. +MYAPP_CLASSPATH=$MYAPP_HOME/osmosis.jar:$OSMOSIS_CLASSPATH +for FILE in `ls $MYAPP_HOME/lib/default/`; do + MYAPP_CLASSPATH=$MYAPP_CLASSPATH:$MYAPP_HOME/lib/default/$FILE +done + +MAINCLASS=org.openstreetmap.osmosis.extract.apidb.v0_6.OsmosisExtractApiDb +EXEC="$JAVACMD $JAVACMD_OPTIONS -cp $MYAPP_CLASSPATH $MAINCLASS $@" + +exec $EXEC diff --git a/bin/osmosis/bin/osmosis-extract-mysql-0.6 b/bin/osmosis/bin/osmosis-extract-mysql-0.6 new file mode 100755 index 0000000..bd3835c --- /dev/null +++ b/bin/osmosis/bin/osmosis-extract-mysql-0.6 @@ -0,0 +1,54 @@ +#!/bin/sh + +# Config files can define several variables used throughout this script. +# JAVACMD - The java command to launch osmosis. +# JAVACMD_OPTIONS - The options to append to the java command, typically used to modify jvm settings such as max memory. + +if [ -f /etc/osmosis ] ; then + . /etc/osmosis +fi + +if [ -f "$HOME/.osmosis" ] ; then + . "$HOME/.osmosis" +fi + +if [ -z "$JAVACMD" ] ; then + # No JAVACMD provided in osmosis config files, therefore default to java + JAVACMD=java +fi + +## resolve links - $0 may be a link to application +PRG="$0" + +# if started without absolute path, but from PATH environment +if [ ! -s "$PRG" ] ; then + PRG=`which $PRG` +fi + +# need this for relative symlinks +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi +done + +# make it fully qualified +saveddir=`pwd` +MYAPP_HOME=`dirname "$PRG"`/.. +MYAPP_HOME=`cd "$MYAPP_HOME" && pwd` +cd "$saveddir" + +# Build up the classpath of required jar files. +MYAPP_CLASSPATH=$MYAPP_HOME/osmosis.jar:$OSMOSIS_CLASSPATH +for FILE in `ls $MYAPP_HOME/lib/default/`; do + MYAPP_CLASSPATH=$MYAPP_CLASSPATH:$MYAPP_HOME/lib/default/$FILE +done + +MAINCLASS=org.openstreetmap.osmosis.extract.mysql.v0_6.OsmosisExtractMysql +EXEC="$JAVACMD $JAVACMD_OPTIONS -cp $MYAPP_CLASSPATH $MAINCLASS $@" + +exec $EXEC diff --git a/bin/osmosis/bin/osmosis.bat b/bin/osmosis/bin/osmosis.bat new file mode 100644 index 0000000..7f7a773 --- /dev/null +++ b/bin/osmosis/bin/osmosis.bat @@ -0,0 +1,41 @@ +@ECHO OFF + +REM This is an equivalent Windows batch file to complement the unix shell script +REM Corresponding lines from the shell script are printed before the matching batch file commands + +REM # Config files can define several variables used throughout this script. +REM # JAVACMD - The java command to launch osmosis. +REM # JAVACMD_OPTIONS - The options to append to the java command, typically used to modify jvm settings such as max memory. +REM # OSMOSIS_OPTIONS - The options to apply to all osmosis invocations, typically used to add plugins or make quiet operation the default. + +REM if [ -f /etc/osmosis ] ; then +REM . /etc/osmosis +REM fi +IF EXIST "%ALLUSERSPROFILE%\osmosis.bat" CALL "%ALLUSERSPROFILE%\osmosis.bat" + +REM if [ -f "$HOME/.osmosis" ] ; then +REM . "$HOME/.osmosis" +REM fi +IF EXIST "%USERPROFILE%\osmosis.bat" CALL "%USERPROFILE%\osmosis.bat" + + +REM if [ -z "$JAVACMD" ] ; then +REM # No JAVACMD provided in osmosis config files, therefore default to java +REM JAVACMD=java +REM fi +IF "%JAVACMD%"=="" set JAVACMD=java + +REM Set "SAVEDIR" to the current directory +set SAVEDIR=%CD% +set MYAPP_HOME=%~dp0.. +REM Now make the MYAPP_HOME path absolute +cd /D %MYAPP_HOME% +set MYAPP_HOME=%CD% +REM Change back to the original directory +cd /D %SAVEDIR% + +set MAINCLASS=org.codehaus.classworlds.Launcher +set PLEXUS_CP=%MYAPP_HOME%\lib\default\plexus-classworlds-2.4.jar +SET EXEC="%JAVACMD%" %JAVACMD_OPTIONS% -cp "%PLEXUS_CP%" -Dapp.home="%MYAPP_HOME%" -Dclassworlds.conf="%MYAPP_HOME%\config\plexus.conf" %MAINCLASS% %OSMOSIS_OPTIONS% %* + +%EXEC% diff --git a/bin/osmosis/changes.txt b/bin/osmosis/changes.txt new file mode 100644 index 0000000..f74e37a --- /dev/null +++ b/bin/osmosis/changes.txt @@ -0,0 +1,398 @@ +0.44 +Improve default settings and performance of pgsnapshot load scripts. +Fix remaining 64-bit id tracking problems. +Increase maximum way node count from 16-bit to 32-bit int. +Full null pointer exception in --merge-replication-files. +Fix javadoc errors on JDK 1.8. +Support spaces in installation path on Windows. +Set User-Agent header on all HTTP requests. +Support importing negative ids to apidb. +Fix one-off error in current way/relation loading. +Fix query for retrieving way nodes and relation members in pgsnapshot module. +Prevent reading duplicate way nodes in pgsnapshot module. +Fix deprecation warnings caused by upgrading to newer dependencies. +Upgrade to protobuf 2.6.0. +Fix replicate_osm_file.sh to return the correct exit status, not always -1. +Add scripts to build a docker image for testing database tasks. +Update build to download Gradle via https. +Fix broken console logging in replication lag reader causing a crash. +Update default replication URLs to match current planet server layout. +Add IntelliJ IDE support. + +0.43.1 +Fix the version number displayed on startup to be up to date. +Remove RELEASE suffix from version number of release builds. + +0.43 +Update command line help to point to the correct wiki location. +Remove idTrackerType arguments to filtering tasks, only the Dynamic option is now available. +Fix the --write-apidb task to use 64-bit ids. +Upgrade to version 1.4 of the Gradle build tool. +Enhance the build scripts to support publishing to Sonatype OSS Repository and Maven Central. +Rename all projects to use an "osmosis-" prefix. +Included a copy of the PBF OSM Binary project in the source tree, and eliminated the pre-compiled osmbin.jar. +Remove pbfmarshall project due to the same functionality being provided by the osm-binary project. +Removed the internal Ivy repository due to all dependencies now being available on Maven Central. +Rename --read-empty short name --re to --rem to avoid clash with --report-entity. +Rename --read-empty-change short name --rec to --remc for consistency with --read-empty. + +0.42 +Fix PostgreSQL timestamp bugs in apidb replication logic. +Fix replication file merging boundary corrections. Occurs when catching up after outages. +Replication logic correctly honours the max timestamp parameter. +Prevent replication file downloader from reading beyond maximum available replication interval. +Prevent replication file downloader from stalling if interval is too long. +Improve error reporting when an unknown global option is specified. +Disable automatic state.txt creation for --read-replication-interval. +Add --tag-transform plugin and task. +Reduce number of file handles consumed by file-based sorting. +Make the default id tracker Dynamic for --used-node and --used-way. +Use Gradle for the automated build scripts instead of Ant/Ivy. +Fix PostgreSQL ident authentication. +Remove obsolete debian build scripts. +Eliminate use of deprecated Spring SimpleJdbcTemplate. +Improve handling of invalid geometries in --pgsql-xxx tasks. +Default keepInvalidWays option on --pgsql-xxx tasks to true. +Enable keepInvalidWays functionality for --pgsql-xxx replication. +Fix pgsnapshot COPY load script to use ST_ prefix for all PostGIS functions. + +0.41 +All entities can now pass metadata through the pipeline. XML tasks can add these as additional attributes on output. +Added --convert-change-to-full-history task. +Added "initialize" support to all tasks to allow pre-processing setup to occur. +Added a number of unit tests to increase test coverage, and reduced use of duplicated support classes. +Added support for the XML bounds element, but still support old bound element. +Added configurable log message prefix to the output of --log-progress-* tasks. +Added completion step timings for --log-progress-* tasks. +Added continuous replication looping support to apidb replication functionality. +Added --write-replication task. +Enhanced --replicate-apidb to send output through the pipeline to tasks like --write-replication instead of being an all-in-one task. +Added --send-replication-sequence task which notifies listeners when new replication data has been written. +Added --send-replication-data task which provides streaming replication data to listeners. +Added --receive-replication task which consumes data sent by --serve-replication-data. +Added --replication-to-change task which converts a replication pipeline stream to a normal change stream. +Added keyValueListFile option to --node-key-value and --way-key-value tasks. +Added JaCoCo code coverage tool to the build process. +Updated ant scripts to use build, checkstyle, test and all targets across all projects. +Update pgsnapshot and pgsimple tasks to no longer use PostGIS deprecated function names. +Added --read-pbf-fast PBF reader which utilises multi-threading to improve performance. +Enhanced XML tasks to handle missing lat/lon attributes on deleted entities. + +0.40.1 +Fix the classworlds version in the Windows launcher. + +0.40 +Fixed base64 encoding of user credentials sent by --upload-xml-change. +Added support for merging Bound objects. +Modified entity object creation to require use of CommonEntityData to simplify constructors. +Added metatag facility to all entities to allow custom data to be passed through the pipeline. +Added read timeout to replication retrieval code to prevent it blocking forever. +Improved JPF loading code to avoid NullPointerException if encountering malformed plugins. +Added ability to set input buffer size for all tasks using an input buffer. +Relaxed Bound argument validation to allow points on all edges of the map to be included in bounding boxes. +Modified PostGIS function calls to be PostGIS 2.0 compatible. +Updated build scripts to support GIT. +Do not emit bound entities when reading PBF files with no bbox information set. +Add --compute-bounding-box and --set-bounding-box tasks for manipulating Bound entities. +Added total object count display to --report-entity task. +Updated all jar dependencies with exception of Xerces to latest versions. +Modified project layouts to match Maven standard layout. +Enhanced tests to dynamically generate test data instead of relying on ant-based data generation. +Updated apidb tasks to support new rails3-based apidb schema (rename of id columns). +Fixed name of --log-progress-change-0.6 task. Was registered as --log-change-progress-0.6. +Modified Ivy to symlink to jar files on supported platforms rather copy jars into projects. + +0.39 +Added the pgsimp tasks which are the old 0.36 version pgsql tasks supporting the old style separate tags tables. +Added a new "cascadingRelations" flag to --bb and --bp which is less costly than "completeRelations" and makes sure that parent relations are emitted when a child relation of theirs is emitted even if that child happens to come after the parent in the stream. The list of relations on output may appear in a different order than on input. +Fixed connection failure error handling in pgsql tasks to display the correct error message instead of a NullPointerException. +Fixed serialisation logic to correctly identify and use the OsmUser.NONE singleton object. +Fixed checkstyle errors in the PBF code. +Renamed the PBF project to "pbf" instead of "binary". +Improved performance in the DataPostbox class used for inter-thread messaging. +Fixed PBF code to allow an empty file to be written. +Updated PBF library dependency from version 1.0 to 1.1. +Updated default PBF filename from dump.osmbin to dump.osm.pbf. +Fixed PBF code to write a header block even if no bound entity exists. +Added java code for PostgreSQL HStore support instead of only including a pre-compiled jar. +Added a new "auto" option for the compressionMethod argument of XML tasks. +Fixed the windows launch batch script to support installation to a different drive than the drive of the working directory. +Fixed the UNIX launch shell script to support spaces in argument values. +Enhanced --used-node to include nodes referenced by ways and relations, instead of just ways. +Enhanced serialisation logic to support negative version numbers. Note this increases the space used by serialisation slightly. +Added a --used-way task. + +0.38 +Updated internal storage to use long instead of int identifiers to remove 2^31 node id limit. +Updated apidb support to the latest schema 20100910084426. +Fixed the --write-pbf short option --wb to point to the writer implementation instead of the reader. +Added additional quoting to commands in the osmosis.bat launcher to fix issues with spaces in the installation path. +Modified plugin loader code to support multiple osmosis-plugins.conf files to allow each plugin to provide its own. + +0.37 +Updated the pgsql schema (now version 6) to move all tags into hstore columns, add a ways.nodes column and CLUSTER the nodes and ways tables. Significant performance increases. +Fixed a bug in --bounding-box and --bounding-polygon preventing use of clipIncompleteEntities after a --tee task. +Added --read-pbf and --write-pbf tasks supporting the new Google Protocol Buffer based binary data format. +Added a new --flatten task for removing multiple versions of single entities from an entity stream. +Fixed bugs in the --bounding-box and --bounding-polygon idTrackerType=Dynamic option. +Enhanced the apidb replication read queries by adding temp table primary keys to fix performance regressions with PostgreSQL 8.4. + +0.36 +Removed 0.5 support. +Added the --fast-write-pgsql task which uses PostgreSQL COPY commands to insert data. +Added the CompactTempFile node location store type which allows efficient pgsql geometry building for small data sets. +All write-pgsql tasks now default to the CompactTempFile node location type store instead of in memory. +Fixed regression in tar builds to make the launch scripts executable again. +Updated the pgsql schema (now version 5) to add a primary key to the relation_members table to allow more efficient updates. +Updated apidb support to the latest schema 20100513171259. +Updated pgsql dataset bounding box queries to force more efficient query plans by disabling inefficient join types. +Added a new dynamic idTrackerType implementation selected by default to the area filtering tasks to simplify usage. +Added the --read-replication-lag task which indicates how far behind the server a local replication is. + +0.35 +Registered --fast-read-xml as a task instead of requiring --fast-read-xml-0.6 to be specified. +Fixed the completeRelations option on the --bounding-box and --bounding-polygon tasks to work as expected and documented. +Updated the --fast-read-xml task to ignore changeset elements. +Various enhancements to the Ivy processing including publishing of all artefacts. +Fixed apidb tasks to correctly select the MySQL drivers instead of always using PostgreSQL drivers. +Fixed the osmosis.bat launcher to handle spaces in the installation path. + +0.34 +Fixed the --sort and --sort-change tasks to use 0.6 task implementations instead of the older 0.5 implementations. +Fixed the archive distributions to include the config/plexus.conf file, and include the launcher scripts in the tar version. +Various cleanups of archive distributions to remove unnecessary files and minimise size. + +0.33 +Use Plexus Classworlds to simplify launcher scripts. +Switch from org.apache.tools.bzip2 to commons-compress (this project is still alive). +Updated the --apply-change task to detect full history diffs and abort. +Enabled cascading deletes in the --truncate-apidb task to minimise foreign key violations on new schema updates. +Updated all PostgreSQL database tasks to support IDENT authentication. +Removed local postgis distribution since it is available on repo1.maven.org now. + +0.32 +Change to Public Domain licence. +Re-factored all entity classes to use a CommonEntityData class to avoid duplication of code and simplify code re-use. +Significant re-factoring of many apidb tasks to use Spring JDBC Template functionality. +Added a --replicate-apidb task for extracting replication files based on PostgreSQL transaction ids. +Fixed PostgreSQL apidb COPY files to include changeset id. +Fixed the Windows launcher batch file to contain all libraries. +Added a --read-replication-interval task. +Updated XML writing tasks to ignore UTF-8 characters not supported by XML. +Included new Xerces XML library to provide proper support for UTF-16 surrogate pairs. +Added a --merge-replication-files task. +Added a --way-key task. +Added a --simplify-change task. +Added pom.xml for maven artifacts + +0.31 +Added a --remove-tags task. +Added JPF plugin support. +Updated the build scripts to use Ivy dependency management. +Added mutable entity support. +Added writeable dataset support. +Added apidb tasks that support both mysql and postgresql api databases. +Added a new --append-change task for combining full history changesets. + +0.30 +Added 0.6 support. +Enhanced the pgsql tasks and schema to support an optional "action" table. +Enhanced the pgsql schema to introduce a stored procedure called during every changeset application. +Enhanced the pgsql schema to include optional bbox and linestring columns on the way table. +Added ability to specify slipping map zoom and coordinates as arguments to the bounding box filter. +Added an "inMemoryBbox" to the pgsql writer task allowing it to calculate bounding boxes using a memory mapped file. +Added an automatic VACUUM ANALYZE of the database for pgsql writer and truncation tasks. +Added migration tasks --migrate and --migrate-change allowing 0.5 data to be converted to 0.6 format. +Added forceUtf8 and profileSql options to all MySQL tasks. +Added a --tag-sort task allowing tags within entities to be sorted alphabetically (0.6 only). +Enhanced the buffer tasks to chunk objects passed (chunks are 1/4 of max buffer size) to minimise thread synchronisation (0.6 only). +Dropped the default buffer size from 100 to 20 which provides slightly improved performance in most cases (0.6 only). +Added the ability to generate full history changesets, as opposed to changesets with a single change per entity (0.6 only). +Added a new allowIncorrectSchemaVersion option to most database tasks. +Added new clipIncompleteEntities option to area filter tasks. It defaults to false which changes existing behaviour. + +0.29 +Fixed the --write-pgsql-simple-dump task to properly escape '\' characters. +Updated the pgsql simple tasks to use an SRID of 4326. +Updated build script to include a tar file distribution preserving launch script execute permissions. +Enhanced the Entity class to allow dates to be represented as strings to avoid parsing overhead. Updated xml tasks to utilise this feature. +Updated the pgsql simple tasks to use the new database schema which is more similar to the one used in the central MySQL +Removed the old postgresql tasks. +Removed "simple" from the names of the simple pgsql tasks. +Added plugin support allowing new tasks in external jar files to be registered with osmosis. +Added command line checks to ensure all task and option arguments are recognised, any misspelt arguments will now raise an error. +Removed all static methods from the task registrar and task manager factory classes to avoid global data and simplify testing. +Added the --node-key and --node-key-value tasks. + +0.28 +Added a maximum file download count feature to the change downloader to limit processing overhead when synchronising long time intervals. +Fixed a major error in the TaskRegistrar from 0.27 where multiple tasks had the same name preventing osmosis from launching. + +0.27 +Added change downloader tasks providing the basis for automatic synchronisation of data sets. + +0.26 +Removed the bdb dataset implementation. +Fixed an incorrect constant bug in the mysql tile calculator causing incorrect tile values to be generated. + +0.25 +Added a new osmosis-extract-mysql application for extracting regular changesets from mysql. +Removed use of String.isEmpty to minimise Java5 incompatibility. +Modified the default pipe connectivity functionality to use stack-based connectivity instead of queue-based connectivity. +Added a populateCurrentTables option to the --write-mysql-change task to match the --write-mysql task. +Added validation code to the merge tasks to verify that input data is sorted. +Enhanced serialisation code to eliminate class identification information in the stream where single data types are being stored. +Fixed a bug in the ListIdTracker class where unsorted ids were not being sorted correctly. +Command line applications now returns status codes, 0 for success, non-zero for failure. +Fixed the --read-api short name to be --ra instead of --wa. +Updated store implementations to use buffered io providing significant performance improvements. +Added a new osmosis-test-users-for-utf8 application for verifying the data integrity of the production user table. +Added "bound" support to the pipeline. +Added "-" alias for stdin/stdout to file reading/writing tasks for Cygwin & Windows +Added a new dataset task --write-bdb for writing to a Berkeley DB implementation of a dataset. +Added a new dataset task --read-bdb for reading from a Berkeley DB implementation of a dataset. +Added a new dataset task --write-customdb for writing to a custom implementation of a dataset. +Added a new dataset task --read-customdb for reading from a custom implementation of a dataset. +Added a new dataset task --write-pgsql-simple for writing to a PostgreSQL implementation of a dataset. +Added a new dataset task --write-pgsql-simple-dump for writing "COPY" load files for a PostgreSQL implementation of a dataset. +Added a new dataset task --truncate-pgsql-simple for truncating all PostgreSQL dataset tables. +Added a new dataset task --read-pgsql-simple for reading from a PostgreSQL implementation of a dataset. +Added a new dataset task --dataset-bounding-box for extracting a bounding box from a dataset. +Added a new dataset task --dataset-dump for dumping the entire contents of a dataset. +Added new --used-node and --way-key-value tasks for filtering ways and their associated nodes with specific tags. + +0.24 +Fixed a bug in the XML node writing code where it would write a ',' character instead of '.' as the decimal separator in some locales. + +0.23 +Added support for a custom decoder when writing xml files to workaround the current production utf8 double encoding issue. +Added short task names to shorten command line (eg. --write-xml becomes --wx). +Fixed a node changeset bug where nodes created at the end of the interval were being excluded from the query. +Added support for default task arguments requiring no name and added them for commonly used tasks requiring a single argument. + +0.22 +Updated mysql writing tasks to check if a timestamp is set and raise a meaningful error indicating where the error occurred. +Modified mysql tasks to use the default character encoding for database connections to avoid suspected double encoding with the production database. +Fixed the Entity serialisation to cater for null user ids and timestamps. +Removed all 0.4 tasks. +Added a new IdList id tracker implementation to be used internally by area filtering tasks to reduce memory usage on small'ish areas. Old BitSet implementation is still selectable if large bounding boxes are required. +Added automatic compression method detection for all xml file tasks to avoid need to use compressionMethod argument. + +0.21 +Introduced a custom serialisation mechanism to improve compressed temporary file performance by approximately 5 times. +Added a new RandomAccessObjectStore class which can be used as the basis for smarter tasks requiring access to data multiple times. +Added completeWays and completeRelations arguments to the area filtering tasks to provide more control over the filtering process. +Added new --tee and --tee-change tasks for sending data to multiple output destinations. + +0.20 +Fixed the integrity reporter task so that it writes new lines after each record. +Relaxed validation checks in the --apply-change task so that it can apply changes to planets already containing data without aborting. + +0.19 +Added a new --integrity-reporter task to detect referential integrity issues between entity types. +Updated the default file names for report tasks. +Added a new --log-progress task to provide progress information to the jdk log during processing. +Added a new --log-change-progress task to provide change progress information to the jdk log during processing. +Fixed a number of bugs in the area extraction tasks. +Updated area extraction tasks to support negative identifiers used on files that are ready for upload. +Fixed bug in the ChangeWriter where the node insert SQL commands were missing tile parameters. + +0.18 +Improved error messages when errors are returned from the api. +Added support for new shorter date format excluding millisecond information. +Updated mysql writing code to support the new 0.5 schema version and fixed bugs in node insertion sql. +Added support for quiet and verbose command line options. +Modified command line arguments to default to using 0.5 tasks. + +0.17 +Added schema version checking to all MySQL tasks. +Updated xml reading tasks to provide line number information when parse errors occur. +Modified xml writing tasks to include the osmosis version number in the generator attribute. +Updated mysql tasks to support the new tile indexing and fixed precision lat/lon. + +0.16 +Fixed a major bug in UTF-8 handling when writing xml files. All files were being written in the default character set. + +0.15 +Added full 0.5 support. +Updated 0.4 code to the 005 schema. + +0.14 +Fixed a bug in the area filtering tasks where the original way was being passed to the destination instead of the modified way with only the available segments populated. +Fixed a bug in the way comparison code where changes in the ordering of segments wouldn't be picked up. +Fixed a bug in date parsing where the month was always being parsed a month in advance. +Added the ability to load database login credentials from a properties file. +Modified xml file writing to use 2 space indenting instead of 4. + +0.13 +Modified the --bounding-polygon task so it can read files containing blank lines. +Added the ability to dump mysql "current" tables. +Modified xml output to only write latitude and longitude to 7 decimal places. + +0.12 +Added a --read-api task for retrieving data from the central server. +Added "user" support to the core data types, and all relevant tasks except database writing tasks. +Added a --bounding-polygon task for filtering data by an area. +Added a --report task which will produce user statistics for a data set. + +0.11 +Modified mysql snapshot task to read entire contents of table and process data in code in attempt to improve dump times. +Added gzip and bzip2 support to xml tasks. +Modified all database snapshot tasks to include entities with a timestamp equalling the snapshot time. +Modified all database changeset tasks to not include the begin time and to include the end time. + +0.10 +Added JOSM-like date handling as a fallback if the standard xml date format isn't found. +Added a custom date parser for the special case of GMT times which this tool always produces (approx 10x speedup over JOSM code and 100x speedup over standard JDK for GMT dates). + +0.9 +Fixed the name of the main class attribute in the jar manifest. +Fixed a potential bug in the change application code where a validation step may have erroneously thrown errors. +Added merge tasks to combine multiple entity or change files together. + +0.8 +Modified node and segment readers to avoid returning duplicate records where multiple records with identical timestamps exist. +Moved main osmosis code into a "core" sub-package allowing new tools to be added. +Fixed timeouts in mysql dumping of ways by using temporary files for query results. +Refactored all temporary file handling to use common persistent iterator functionality. +Fixed some classes not marked as Serializable. +Updated change application to use less strict validation to handle "re-creates" of entities. +Updated xml writing tasks to always write in UTC format. + +0.7 +Made a number of changes to the mysql dump task to improve performance and reduce the likelihood of timeouts. + +0.6 +Modified ChangeDeriver task to set the timestamp of deleted records to the current time. +Fixed all uses of java.sql.Timestamp to be converted to java.util.Date explicitly instead of utilising inheritance. +Fixed bug in change writer where timestamps weren't being written for segments. +Added UserIdManager functionality which creates a system "Osmosis" user in the database to assign all changes to. + +0.5 +Modified command line date format to avoid use of spaces. + +0.4 +Modified mysql dump task to produce consistent snapshots. +Added the ability to skip "current" tables when importing to mysql. +Optimised mysql change reading queries. + +0.3 +Added mysql table truncator task. +Updated segment xml processing code to handle timestamps. +Made xml date processing during xml reading optional to improve performance. +Added buffer tasks to allow pipeline processing to be split across multiple threads. +Change reading and writing from a mysql database is now working, at least for simple test cases. + +0.2 +Added Main-Class feature to the jar manifest simplifying program launch. +Added a shell launch script to simplify running on unix/linux. +Added a readme with basic installation instructions. +Added xml date parsing support. +Fixed database dump code to read the "current" tables. +Added a task for reading changes from a database. +Added a task for writing changes to a database. +Added a task for truncating database tables. +Improved mysql import performance by disabling indexes and locking tables. + +0.1 +Initial version. diff --git a/bin/osmosis/config/plexus.conf b/bin/osmosis/config/plexus.conf new file mode 100644 index 0000000..5dcd42b --- /dev/null +++ b/bin/osmosis/config/plexus.conf @@ -0,0 +1,5 @@ +main is org.openstreetmap.osmosis.core.Osmosis from osmosis.core + +[osmosis.core] +load ${app.home}/lib/default/*.jar +load ${app.home}/config diff --git a/bin/osmosis/copying.txt b/bin/osmosis/copying.txt new file mode 100644 index 0000000..4e6d150 --- /dev/null +++ b/bin/osmosis/copying.txt @@ -0,0 +1,16 @@ +Osmosis consists of all files in this archive with the exception of the +third party libraries in the lib sub-directory, and the osmosis-osm-binary +library which is a re-packaged version of a third-party library. + +Osmosis is placed into the public domain and where this is not legally +possible everybody is granted a perpetual, irrevocable license to use +this work for any purpose whatsoever. + +DISCLAIMERS +By making Osmosis publicly available, it is hoped that users will find the +software useful. However: +* Osmosis comes without any warranty, to the extent permitted by applicable +law. +* Unless required by applicable law, no liability will be accepted by +the authors and distributors of this software for any damages caused +as a result of its use. diff --git a/bin/osmosis/lib/default/commons-codec-1.10.jar b/bin/osmosis/lib/default/commons-codec-1.10.jar new file mode 100644 index 0000000..1d7417c Binary files /dev/null and b/bin/osmosis/lib/default/commons-codec-1.10.jar differ diff --git a/bin/osmosis/lib/default/commons-compress-1.9.jar b/bin/osmosis/lib/default/commons-compress-1.9.jar new file mode 100644 index 0000000..14e7e86 Binary files /dev/null and b/bin/osmosis/lib/default/commons-compress-1.9.jar differ diff --git a/bin/osmosis/lib/default/commons-dbcp-1.4.jar b/bin/osmosis/lib/default/commons-dbcp-1.4.jar new file mode 100644 index 0000000..c4c1c4f Binary files /dev/null and b/bin/osmosis/lib/default/commons-dbcp-1.4.jar differ diff --git a/bin/osmosis/lib/default/commons-logging-1.2.jar b/bin/osmosis/lib/default/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/bin/osmosis/lib/default/commons-logging-1.2.jar differ diff --git a/bin/osmosis/lib/default/commons-pool-1.5.4.jar b/bin/osmosis/lib/default/commons-pool-1.5.4.jar new file mode 100644 index 0000000..43edf99 Binary files /dev/null and b/bin/osmosis/lib/default/commons-pool-1.5.4.jar differ diff --git a/bin/osmosis/lib/default/jpf-1.5.jar b/bin/osmosis/lib/default/jpf-1.5.jar new file mode 100644 index 0000000..6d46124 Binary files /dev/null and b/bin/osmosis/lib/default/jpf-1.5.jar differ diff --git a/bin/osmosis/lib/default/mapsforge-core-0.6.0.jar b/bin/osmosis/lib/default/mapsforge-core-0.6.0.jar new file mode 100644 index 0000000..ed3bf31 Binary files /dev/null and b/bin/osmosis/lib/default/mapsforge-core-0.6.0.jar differ diff --git a/bin/osmosis/lib/default/mapsforge-map-0.6.0.jar b/bin/osmosis/lib/default/mapsforge-map-0.6.0.jar new file mode 100644 index 0000000..ed944f7 Binary files /dev/null and b/bin/osmosis/lib/default/mapsforge-map-0.6.0.jar differ diff --git a/bin/osmosis/lib/default/mapsforge-map-reader-0.6.0.jar b/bin/osmosis/lib/default/mapsforge-map-reader-0.6.0.jar new file mode 100644 index 0000000..8a34c39 Binary files /dev/null and b/bin/osmosis/lib/default/mapsforge-map-reader-0.6.0.jar differ diff --git a/bin/osmosis/lib/default/mapsforge-map-writer-0.6.0.jar b/bin/osmosis/lib/default/mapsforge-map-writer-0.6.0.jar new file mode 100644 index 0000000..0eb603b Binary files /dev/null and b/bin/osmosis/lib/default/mapsforge-map-writer-0.6.0.jar differ diff --git a/bin/osmosis/lib/default/mysql-connector-java-5.1.35.jar b/bin/osmosis/lib/default/mysql-connector-java-5.1.35.jar new file mode 100644 index 0000000..27fbbce Binary files /dev/null and b/bin/osmosis/lib/default/mysql-connector-java-5.1.35.jar differ diff --git a/bin/osmosis/lib/default/netty-3.2.10.Final.jar b/bin/osmosis/lib/default/netty-3.2.10.Final.jar new file mode 100644 index 0000000..8a44fd3 Binary files /dev/null and b/bin/osmosis/lib/default/netty-3.2.10.Final.jar differ diff --git a/bin/osmosis/lib/default/osmosis-apidb-0.44.1.jar b/bin/osmosis/lib/default/osmosis-apidb-0.44.1.jar new file mode 100644 index 0000000..4866a9b Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-apidb-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-areafilter-0.44.1.jar b/bin/osmosis/lib/default/osmosis-areafilter-0.44.1.jar new file mode 100644 index 0000000..9327faf Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-areafilter-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-core-0.44.1.jar b/bin/osmosis/lib/default/osmosis-core-0.44.1.jar new file mode 100644 index 0000000..82fb826 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-core-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-dataset-0.44.1.jar b/bin/osmosis/lib/default/osmosis-dataset-0.44.1.jar new file mode 100644 index 0000000..350e2d8 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-dataset-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-extract-0.44.1.jar b/bin/osmosis/lib/default/osmosis-extract-0.44.1.jar new file mode 100644 index 0000000..a49eecb Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-extract-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-hstore-jdbc-0.44.1.jar b/bin/osmosis/lib/default/osmosis-hstore-jdbc-0.44.1.jar new file mode 100644 index 0000000..2ed43f8 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-hstore-jdbc-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-osm-binary-0.44.1.jar b/bin/osmosis/lib/default/osmosis-osm-binary-0.44.1.jar new file mode 100644 index 0000000..6ce9985 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-osm-binary-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-pbf-0.44.1.jar b/bin/osmosis/lib/default/osmosis-pbf-0.44.1.jar new file mode 100644 index 0000000..9de35a5 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-pbf-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-pbf2-0.44.1.jar b/bin/osmosis/lib/default/osmosis-pbf2-0.44.1.jar new file mode 100644 index 0000000..04c1583 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-pbf2-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-pgsimple-0.44.1.jar b/bin/osmosis/lib/default/osmosis-pgsimple-0.44.1.jar new file mode 100644 index 0000000..1974c83 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-pgsimple-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-pgsnapshot-0.44.1.jar b/bin/osmosis/lib/default/osmosis-pgsnapshot-0.44.1.jar new file mode 100644 index 0000000..65bc107 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-pgsnapshot-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-replication-0.44.1.jar b/bin/osmosis/lib/default/osmosis-replication-0.44.1.jar new file mode 100644 index 0000000..736c935 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-replication-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-replication-http-0.44.1.jar b/bin/osmosis/lib/default/osmosis-replication-http-0.44.1.jar new file mode 100644 index 0000000..3d60129 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-replication-http-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-set-0.44.1.jar b/bin/osmosis/lib/default/osmosis-set-0.44.1.jar new file mode 100644 index 0000000..3d2c77a Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-set-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-tagfilter-0.44.1.jar b/bin/osmosis/lib/default/osmosis-tagfilter-0.44.1.jar new file mode 100644 index 0000000..09263a4 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-tagfilter-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-tagtransform-0.44.1.jar b/bin/osmosis/lib/default/osmosis-tagtransform-0.44.1.jar new file mode 100644 index 0000000..e8917d2 Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-tagtransform-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/osmosis-xml-0.44.1.jar b/bin/osmosis/lib/default/osmosis-xml-0.44.1.jar new file mode 100644 index 0000000..b1efd2d Binary files /dev/null and b/bin/osmosis/lib/default/osmosis-xml-0.44.1.jar differ diff --git a/bin/osmosis/lib/default/plexus-classworlds-2.5.2.jar b/bin/osmosis/lib/default/plexus-classworlds-2.5.2.jar new file mode 100644 index 0000000..2560b3f Binary files /dev/null and b/bin/osmosis/lib/default/plexus-classworlds-2.5.2.jar differ diff --git a/bin/osmosis/lib/default/postgis-jdbc-1.3.3.jar b/bin/osmosis/lib/default/postgis-jdbc-1.3.3.jar new file mode 100644 index 0000000..05d7f68 Binary files /dev/null and b/bin/osmosis/lib/default/postgis-jdbc-1.3.3.jar differ diff --git a/bin/osmosis/lib/default/postgresql-9.4-1201-jdbc4.jar b/bin/osmosis/lib/default/postgresql-9.4-1201-jdbc4.jar new file mode 100644 index 0000000..e028f35 Binary files /dev/null and b/bin/osmosis/lib/default/postgresql-9.4-1201-jdbc4.jar differ diff --git a/bin/osmosis/lib/default/protobuf-java-2.6.1.jar b/bin/osmosis/lib/default/protobuf-java-2.6.1.jar new file mode 100644 index 0000000..0fcd808 Binary files /dev/null and b/bin/osmosis/lib/default/protobuf-java-2.6.1.jar differ diff --git a/bin/osmosis/lib/default/spring-beans-4.1.6.RELEASE.jar b/bin/osmosis/lib/default/spring-beans-4.1.6.RELEASE.jar new file mode 100644 index 0000000..7206d00 Binary files /dev/null and b/bin/osmosis/lib/default/spring-beans-4.1.6.RELEASE.jar differ diff --git a/bin/osmosis/lib/default/spring-core-4.1.6.RELEASE.jar b/bin/osmosis/lib/default/spring-core-4.1.6.RELEASE.jar new file mode 100644 index 0000000..fe5f612 Binary files /dev/null and b/bin/osmosis/lib/default/spring-core-4.1.6.RELEASE.jar differ diff --git a/bin/osmosis/lib/default/spring-jdbc-4.1.6.RELEASE.jar b/bin/osmosis/lib/default/spring-jdbc-4.1.6.RELEASE.jar new file mode 100644 index 0000000..ac4667f Binary files /dev/null and b/bin/osmosis/lib/default/spring-jdbc-4.1.6.RELEASE.jar differ diff --git a/bin/osmosis/lib/default/spring-tx-4.1.6.RELEASE.jar b/bin/osmosis/lib/default/spring-tx-4.1.6.RELEASE.jar new file mode 100644 index 0000000..28e70b0 Binary files /dev/null and b/bin/osmosis/lib/default/spring-tx-4.1.6.RELEASE.jar differ diff --git a/bin/osmosis/lib/default/stax2-api-3.1.4.jar b/bin/osmosis/lib/default/stax2-api-3.1.4.jar new file mode 100644 index 0000000..dded036 Binary files /dev/null and b/bin/osmosis/lib/default/stax2-api-3.1.4.jar differ diff --git a/bin/osmosis/lib/default/woodstox-core-lgpl-4.4.1.jar b/bin/osmosis/lib/default/woodstox-core-lgpl-4.4.1.jar new file mode 100644 index 0000000..d5a0083 Binary files /dev/null and b/bin/osmosis/lib/default/woodstox-core-lgpl-4.4.1.jar differ diff --git a/bin/osmosis/lib/default/xercesImpl-2.9.1.jar b/bin/osmosis/lib/default/xercesImpl-2.9.1.jar new file mode 100644 index 0000000..547f563 Binary files /dev/null and b/bin/osmosis/lib/default/xercesImpl-2.9.1.jar differ diff --git a/bin/osmosis/package.iml b/bin/osmosis/package.iml new file mode 100644 index 0000000..83d96f6 --- /dev/null +++ b/bin/osmosis/package.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/bin/osmosis/readme.txt b/bin/osmosis/readme.txt new file mode 100644 index 0000000..e14a905 --- /dev/null +++ b/bin/osmosis/readme.txt @@ -0,0 +1,42 @@ +INSTALLATION +Unzip the distribution in the location of your choice. +On unix/linux systems, make the bin/osmosis script executable (ie. chmod u+x osmosis). +If desired, create a symbolic link to the osmosis script somewhere on your path (eg. ln -s appdir/bin/osmosis ~/bin/osmosis). + +CONFIGURATION +Common command line options can be specified in configuration files. + +On Linux, the file can reside in the following locations with later files overriding earlier files: +/etc/osmosis +$HOME/.osmosis + +On Windows, the file can reside in the following locations with later files overriding earlier files: +%ALLUSERSPROFILE%\osmosis.bat +%USERPROFILE%\osmosis.bat + +The following variables can be defined in these files: +JAVACMD - The java command to be invoked. Default is "java". +JAVACMD_OPTIONS - The java jvm options to apply (eg. -Xmx512M). +OSMOSIS_OPTIONS - The osmosis options to apply (eg. -q or -plugin MyPluginLoaderClass). + +COMPILATION +To perform a complete osmosis rebuild, the following command may be run from the osmosis root directory. + +ant all + +The "all" ant target performs all steps including creation of new distribution files, checkstyle analysis and unit tests. + +Sometimes old files can be left hanging around causing problems. It may be necessary to run the following command +to clean up any old files. + +ant clean + +If you wish to rebuild all artefacts without running unit tests, the following command may be used. + +ant publish + +HELP +Osmosis documentation is available at: +http://wiki.openstreetmap.org/index.php/Osmosis + +Please ask any questions, report any issues, or suggest enhancements using the Open Street Map talk or development mailing lists. diff --git a/bin/osmosis/script/contrib/CreateGeometryForWays.sql b/bin/osmosis/script/contrib/CreateGeometryForWays.sql new file mode 100644 index 0000000..69ef6a5 --- /dev/null +++ b/bin/osmosis/script/contrib/CreateGeometryForWays.sql @@ -0,0 +1,51 @@ +------------------------------------------------------------------------------- +-- The following script creates a new table for the pgsql simple schema for +-- storing full way geometries. +-- +-- Author: Ralf +------------------------------------------------------------------------------- + + +-- drop table if it exists +DROP TABLE IF EXISTS way_geometry; + +-- create table +CREATE TABLE way_geometry( + way_id bigint NOT NULL +); +-- add PostGIS geometry column +SELECT AddGeometryColumn('', 'way_geometry', 'geom', 4326, 'GEOMETRY', 2); + + + +------------------------------------------------------------------------------- +-- the following might go into the POST_LOAD_SQL-array in the class "PostgreSqlWriter"?? +------------------------------------------------------------------------------- + +-- add a linestring for every way (create a polyline) +INSERT INTO way_geometry select id, ( select ST_LineFromMultiPoint( Collect(nodes.geom) ) from nodes +left join way_nodes on nodes.id=way_nodes.node_id where way_nodes.way_id=ways.id ) FROM ways; + +-- after creating a line for every way (polyline), we want closed ways to be stored as polygones. +-- So we need to delete the previously created polylines for these ways first. +DELETE FROM way_geometry WHERE way_id IN + ( SELECT ways.id FROM ways + WHERE ST_IsClosed( (SELECT ST_LineFromMultiPoint( Collect(n.geom) ) FROM nodes n LEFT JOIN way_nodes wn ON n.id=wn.node_id WHERE ways.id=wn.way_id) ) + AND ST_NumPoints( (SELECT ST_LineFromMultiPoint( Collect(n.geom) ) FROM nodes n LEFT JOIN way_nodes wn ON n.id=wn.node_id WHERE ways.id=wn.way_id) ) >= 3 + ) +; + +-- now we need to add the polyline geometry for every closed way +INSERT INTO way_geometry SELECT ways.id, + ( SELECT ST_MakePolygon( ST_LineFromMultiPoint(Collect(nodes.geom)) ) FROM nodes + LEFT JOIN way_nodes ON nodes.id=way_nodes.node_id WHERE way_nodes.way_id=ways.id + ) +FROM ways +WHERE ST_IsClosed( (SELECT ST_LineFromMultiPoint( Collect(n.geom) ) FROM nodes n LEFT JOIN way_nodes wn ON n.id=wn.node_id WHERE ways.id=wn.way_id) ) +AND ST_NumPoints( (SELECT ST_LineFromMultiPoint( Collect(n.geom) ) FROM nodes n LEFT JOIN way_nodes wn ON n.id=wn.node_id WHERE ways.id=wn.way_id) ) >= 3 +; +------------------------------------------------------------------------------- + +-- create index on way_geometry +CREATE INDEX idx_way_geometry_way_id ON way_geometry USING btree (way_id); +CREATE INDEX idx_way_geometry_geom ON way_geometry USING gist (geom); diff --git a/bin/osmosis/script/contrib/apidb_0.6.sql b/bin/osmosis/script/contrib/apidb_0.6.sql new file mode 100644 index 0000000..ef88ab8 --- /dev/null +++ b/bin/osmosis/script/contrib/apidb_0.6.sql @@ -0,0 +1,4096 @@ +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = off; +SET check_function_bodies = false; +SET client_min_messages = warning; +SET escape_string_warning = off; + +-- +-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: - +-- + +CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; + + +SET search_path = public, pg_catalog; + +-- +-- Name: gbtreekey16; Type: SHELL TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey16; + + +-- +-- Name: gbtreekey16_in(cstring); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey16_in(cstring) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_in'; + + +-- +-- Name: gbtreekey16_out(gbtreekey16); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey16_out(gbtreekey16) RETURNS cstring + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_out'; + + +-- +-- Name: gbtreekey16; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey16 ( + INTERNALLENGTH = 16, + INPUT = gbtreekey16_in, + OUTPUT = gbtreekey16_out, + ALIGNMENT = int4, + STORAGE = plain +); + + +-- +-- Name: gbtreekey32; Type: SHELL TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey32; + + +-- +-- Name: gbtreekey32_in(cstring); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey32_in(cstring) RETURNS gbtreekey32 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_in'; + + +-- +-- Name: gbtreekey32_out(gbtreekey32); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey32_out(gbtreekey32) RETURNS cstring + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_out'; + + +-- +-- Name: gbtreekey32; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey32 ( + INTERNALLENGTH = 32, + INPUT = gbtreekey32_in, + OUTPUT = gbtreekey32_out, + ALIGNMENT = int4, + STORAGE = plain +); + + +-- +-- Name: gbtreekey4; Type: SHELL TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey4; + + +-- +-- Name: gbtreekey4_in(cstring); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey4_in(cstring) RETURNS gbtreekey4 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_in'; + + +-- +-- Name: gbtreekey4_out(gbtreekey4); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey4_out(gbtreekey4) RETURNS cstring + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_out'; + + +-- +-- Name: gbtreekey4; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey4 ( + INTERNALLENGTH = 4, + INPUT = gbtreekey4_in, + OUTPUT = gbtreekey4_out, + ALIGNMENT = int4, + STORAGE = plain +); + + +-- +-- Name: gbtreekey8; Type: SHELL TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey8; + + +-- +-- Name: gbtreekey8_in(cstring); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey8_in(cstring) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_in'; + + +-- +-- Name: gbtreekey8_out(gbtreekey8); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey8_out(gbtreekey8) RETURNS cstring + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_out'; + + +-- +-- Name: gbtreekey8; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey8 ( + INTERNALLENGTH = 8, + INPUT = gbtreekey8_in, + OUTPUT = gbtreekey8_out, + ALIGNMENT = int4, + STORAGE = plain +); + + +-- +-- Name: gbtreekey_var; Type: SHELL TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey_var; + + +-- +-- Name: gbtreekey_var_in(cstring); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey_var_in(cstring) RETURNS gbtreekey_var + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_in'; + + +-- +-- Name: gbtreekey_var_out(gbtreekey_var); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbtreekey_var_out(gbtreekey_var) RETURNS cstring + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbtreekey_out'; + + +-- +-- Name: gbtreekey_var; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gbtreekey_var ( + INTERNALLENGTH = variable, + INPUT = gbtreekey_var_in, + OUTPUT = gbtreekey_var_out, + ALIGNMENT = int4, + STORAGE = extended +); + + +-- +-- Name: gpx_visibility_enum; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE gpx_visibility_enum AS ENUM ( + 'private', + 'public', + 'trackable', + 'identifiable' +); + + +-- +-- Name: nwr_enum; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE nwr_enum AS ENUM ( + 'Node', + 'Way', + 'Relation' +); + + +-- +-- Name: user_role_enum; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE user_role_enum AS ENUM ( + 'administrator', + 'moderator' +); + + +-- +-- Name: user_status_enum; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE user_status_enum AS ENUM ( + 'pending', + 'active', + 'confirmed', + 'suspended', + 'deleted' +); + + +-- +-- Name: gbt_bit_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_compress'; + + +-- +-- Name: gbt_bit_consistent(internal, bit, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_consistent(internal, bit, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_consistent'; + + +-- +-- Name: gbt_bit_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_penalty'; + + +-- +-- Name: gbt_bit_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_picksplit'; + + +-- +-- Name: gbt_bit_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_same'; + + +-- +-- Name: gbt_bit_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bit_union(bytea, internal) RETURNS gbtreekey_var + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bit_union'; + + +-- +-- Name: gbt_bpchar_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bpchar_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bpchar_compress'; + + +-- +-- Name: gbt_bpchar_consistent(internal, character, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bpchar_consistent(internal, character, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bpchar_consistent'; + + +-- +-- Name: gbt_bytea_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_compress'; + + +-- +-- Name: gbt_bytea_consistent(internal, bytea, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_consistent(internal, bytea, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_consistent'; + + +-- +-- Name: gbt_bytea_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_penalty'; + + +-- +-- Name: gbt_bytea_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_picksplit'; + + +-- +-- Name: gbt_bytea_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_same'; + + +-- +-- Name: gbt_bytea_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_bytea_union(bytea, internal) RETURNS gbtreekey_var + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_bytea_union'; + + +-- +-- Name: gbt_cash_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_compress'; + + +-- +-- Name: gbt_cash_consistent(internal, money, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_consistent(internal, money, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_consistent'; + + +-- +-- Name: gbt_cash_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_penalty'; + + +-- +-- Name: gbt_cash_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_picksplit'; + + +-- +-- Name: gbt_cash_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_same'; + + +-- +-- Name: gbt_cash_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_cash_union(bytea, internal) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_cash_union'; + + +-- +-- Name: gbt_date_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_compress'; + + +-- +-- Name: gbt_date_consistent(internal, date, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_consistent(internal, date, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_consistent'; + + +-- +-- Name: gbt_date_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_penalty'; + + +-- +-- Name: gbt_date_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_picksplit'; + + +-- +-- Name: gbt_date_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_same'; + + +-- +-- Name: gbt_date_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_date_union(bytea, internal) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_date_union'; + + +-- +-- Name: gbt_decompress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_decompress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_decompress'; + + +-- +-- Name: gbt_float4_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_compress'; + + +-- +-- Name: gbt_float4_consistent(internal, real, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_consistent(internal, real, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_consistent'; + + +-- +-- Name: gbt_float4_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_penalty'; + + +-- +-- Name: gbt_float4_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_picksplit'; + + +-- +-- Name: gbt_float4_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_same'; + + +-- +-- Name: gbt_float4_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float4_union(bytea, internal) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float4_union'; + + +-- +-- Name: gbt_float8_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_compress'; + + +-- +-- Name: gbt_float8_consistent(internal, double precision, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_consistent(internal, double precision, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_consistent'; + + +-- +-- Name: gbt_float8_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_penalty'; + + +-- +-- Name: gbt_float8_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_picksplit'; + + +-- +-- Name: gbt_float8_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_same'; + + +-- +-- Name: gbt_float8_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_float8_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_float8_union'; + + +-- +-- Name: gbt_inet_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_compress'; + + +-- +-- Name: gbt_inet_consistent(internal, inet, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_consistent(internal, inet, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_consistent'; + + +-- +-- Name: gbt_inet_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_penalty'; + + +-- +-- Name: gbt_inet_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_picksplit'; + + +-- +-- Name: gbt_inet_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_same'; + + +-- +-- Name: gbt_inet_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_inet_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_inet_union'; + + +-- +-- Name: gbt_int2_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_compress'; + + +-- +-- Name: gbt_int2_consistent(internal, smallint, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_consistent(internal, smallint, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_consistent'; + + +-- +-- Name: gbt_int2_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_penalty'; + + +-- +-- Name: gbt_int2_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_picksplit'; + + +-- +-- Name: gbt_int2_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_same'; + + +-- +-- Name: gbt_int2_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int2_union(bytea, internal) RETURNS gbtreekey4 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int2_union'; + + +-- +-- Name: gbt_int4_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_compress'; + + +-- +-- Name: gbt_int4_consistent(internal, integer, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_consistent(internal, integer, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_consistent'; + + +-- +-- Name: gbt_int4_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_penalty'; + + +-- +-- Name: gbt_int4_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_picksplit'; + + +-- +-- Name: gbt_int4_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_same'; + + +-- +-- Name: gbt_int4_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int4_union(bytea, internal) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int4_union'; + + +-- +-- Name: gbt_int8_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_compress'; + + +-- +-- Name: gbt_int8_consistent(internal, bigint, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_consistent(internal, bigint, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_consistent'; + + +-- +-- Name: gbt_int8_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_penalty'; + + +-- +-- Name: gbt_int8_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_picksplit'; + + +-- +-- Name: gbt_int8_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_same'; + + +-- +-- Name: gbt_int8_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_int8_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_int8_union'; + + +-- +-- Name: gbt_intv_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_compress'; + + +-- +-- Name: gbt_intv_consistent(internal, interval, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_consistent(internal, interval, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_consistent'; + + +-- +-- Name: gbt_intv_decompress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_decompress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_decompress'; + + +-- +-- Name: gbt_intv_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_penalty'; + + +-- +-- Name: gbt_intv_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_picksplit'; + + +-- +-- Name: gbt_intv_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_same'; + + +-- +-- Name: gbt_intv_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_intv_union(bytea, internal) RETURNS gbtreekey32 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_intv_union'; + + +-- +-- Name: gbt_macad_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_compress'; + + +-- +-- Name: gbt_macad_consistent(internal, macaddr, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_consistent(internal, macaddr, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_consistent'; + + +-- +-- Name: gbt_macad_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_penalty'; + + +-- +-- Name: gbt_macad_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_picksplit'; + + +-- +-- Name: gbt_macad_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_same'; + + +-- +-- Name: gbt_macad_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_macad_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_macad_union'; + + +-- +-- Name: gbt_numeric_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_compress'; + + +-- +-- Name: gbt_numeric_consistent(internal, numeric, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_consistent(internal, numeric, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_consistent'; + + +-- +-- Name: gbt_numeric_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_penalty'; + + +-- +-- Name: gbt_numeric_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_picksplit'; + + +-- +-- Name: gbt_numeric_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_same'; + + +-- +-- Name: gbt_numeric_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_numeric_union(bytea, internal) RETURNS gbtreekey_var + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_numeric_union'; + + +-- +-- Name: gbt_oid_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_compress'; + + +-- +-- Name: gbt_oid_consistent(internal, oid, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_consistent(internal, oid, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_consistent'; + + +-- +-- Name: gbt_oid_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_penalty'; + + +-- +-- Name: gbt_oid_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_picksplit'; + + +-- +-- Name: gbt_oid_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_same'; + + +-- +-- Name: gbt_oid_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_oid_union(bytea, internal) RETURNS gbtreekey8 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_oid_union'; + + +-- +-- Name: gbt_text_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_compress'; + + +-- +-- Name: gbt_text_consistent(internal, text, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_consistent(internal, text, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_consistent'; + + +-- +-- Name: gbt_text_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_penalty'; + + +-- +-- Name: gbt_text_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_picksplit'; + + +-- +-- Name: gbt_text_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_same'; + + +-- +-- Name: gbt_text_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_text_union(bytea, internal) RETURNS gbtreekey_var + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_text_union'; + + +-- +-- Name: gbt_time_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_compress'; + + +-- +-- Name: gbt_time_consistent(internal, time without time zone, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_consistent(internal, time without time zone, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_consistent'; + + +-- +-- Name: gbt_time_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_penalty'; + + +-- +-- Name: gbt_time_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_picksplit'; + + +-- +-- Name: gbt_time_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_same'; + + +-- +-- Name: gbt_time_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_time_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_time_union'; + + +-- +-- Name: gbt_timetz_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_timetz_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_timetz_compress'; + + +-- +-- Name: gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_timetz_consistent'; + + +-- +-- Name: gbt_ts_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_compress'; + + +-- +-- Name: gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_consistent'; + + +-- +-- Name: gbt_ts_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_penalty(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_penalty'; + + +-- +-- Name: gbt_ts_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_picksplit(internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_picksplit'; + + +-- +-- Name: gbt_ts_same(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_same(internal, internal, internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_same'; + + +-- +-- Name: gbt_ts_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_ts_union(bytea, internal) RETURNS gbtreekey16 + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_ts_union'; + + +-- +-- Name: gbt_tstz_compress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_tstz_compress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_tstz_compress'; + + +-- +-- Name: gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) RETURNS boolean + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_tstz_consistent'; + + +-- +-- Name: gbt_var_decompress(internal); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION gbt_var_decompress(internal) RETURNS internal + LANGUAGE c IMMUTABLE STRICT + AS '$libdir/btree_gist', 'gbt_var_decompress'; + + +-- +-- Name: maptile_for_point(bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION maptile_for_point(bigint, bigint, integer) RETURNS integer + LANGUAGE c STRICT + AS '/path/to/libpgosm.so', 'maptile_for_point'; + + +-- +-- Name: tile_for_point(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION tile_for_point(integer, integer) RETURNS bigint + LANGUAGE c STRICT + AS '/path/to/libpgosm.so', 'tile_for_point'; + + +-- +-- Name: xid_to_int4(xid); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION xid_to_int4(xid) RETURNS integer + LANGUAGE c IMMUTABLE STRICT + AS '/path/to/libpgosm.so', 'xid_to_int4'; + + +-- +-- Name: gist_bit_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_bit_ops USING gist; + + +-- +-- Name: gist_bit_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_bit_ops + DEFAULT FOR TYPE bit USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(bit,bit) , + OPERATOR 2 <=(bit,bit) , + OPERATOR 3 =(bit,bit) , + OPERATOR 4 >=(bit,bit) , + OPERATOR 5 >(bit,bit) , + FUNCTION 1 gbt_bit_consistent(internal,bit,smallint,oid,internal) , + FUNCTION 2 gbt_bit_union(bytea,internal) , + FUNCTION 3 gbt_bit_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_bit_penalty(internal,internal,internal) , + FUNCTION 6 gbt_bit_picksplit(internal,internal) , + FUNCTION 7 gbt_bit_same(internal,internal,internal); + + +-- +-- Name: gist_bpchar_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_bpchar_ops USING gist; + + +-- +-- Name: gist_bpchar_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_bpchar_ops + DEFAULT FOR TYPE character USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(character,character) , + OPERATOR 2 <=(character,character) , + OPERATOR 3 =(character,character) , + OPERATOR 4 >=(character,character) , + OPERATOR 5 >(character,character) , + FUNCTION 1 gbt_bpchar_consistent(internal,character,smallint,oid,internal) , + FUNCTION 2 gbt_text_union(bytea,internal) , + FUNCTION 3 gbt_bpchar_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_text_penalty(internal,internal,internal) , + FUNCTION 6 gbt_text_picksplit(internal,internal) , + FUNCTION 7 gbt_text_same(internal,internal,internal); + + +-- +-- Name: gist_bytea_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_bytea_ops USING gist; + + +-- +-- Name: gist_bytea_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_bytea_ops + DEFAULT FOR TYPE bytea USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(bytea,bytea) , + OPERATOR 2 <=(bytea,bytea) , + OPERATOR 3 =(bytea,bytea) , + OPERATOR 4 >=(bytea,bytea) , + OPERATOR 5 >(bytea,bytea) , + FUNCTION 1 gbt_bytea_consistent(internal,bytea,smallint,oid,internal) , + FUNCTION 2 gbt_bytea_union(bytea,internal) , + FUNCTION 3 gbt_bytea_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_bytea_penalty(internal,internal,internal) , + FUNCTION 6 gbt_bytea_picksplit(internal,internal) , + FUNCTION 7 gbt_bytea_same(internal,internal,internal); + + +-- +-- Name: gist_cash_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_cash_ops USING gist; + + +-- +-- Name: gist_cash_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_cash_ops + DEFAULT FOR TYPE money USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(money,money) , + OPERATOR 2 <=(money,money) , + OPERATOR 3 =(money,money) , + OPERATOR 4 >=(money,money) , + OPERATOR 5 >(money,money) , + FUNCTION 1 gbt_cash_consistent(internal,money,smallint,oid,internal) , + FUNCTION 2 gbt_cash_union(bytea,internal) , + FUNCTION 3 gbt_cash_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_cash_penalty(internal,internal,internal) , + FUNCTION 6 gbt_cash_picksplit(internal,internal) , + FUNCTION 7 gbt_cash_same(internal,internal,internal); + + +-- +-- Name: gist_cidr_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_cidr_ops USING gist; + + +-- +-- Name: gist_cidr_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_cidr_ops + DEFAULT FOR TYPE cidr USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(inet,inet) , + OPERATOR 2 <=(inet,inet) , + OPERATOR 3 =(inet,inet) , + OPERATOR 4 >=(inet,inet) , + OPERATOR 5 >(inet,inet) , + FUNCTION 1 gbt_inet_consistent(internal,inet,smallint,oid,internal) , + FUNCTION 2 gbt_inet_union(bytea,internal) , + FUNCTION 3 gbt_inet_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_inet_penalty(internal,internal,internal) , + FUNCTION 6 gbt_inet_picksplit(internal,internal) , + FUNCTION 7 gbt_inet_same(internal,internal,internal); + + +-- +-- Name: gist_date_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_date_ops USING gist; + + +-- +-- Name: gist_date_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_date_ops + DEFAULT FOR TYPE date USING gist AS + STORAGE gbtreekey8 , + OPERATOR 1 <(date,date) , + OPERATOR 2 <=(date,date) , + OPERATOR 3 =(date,date) , + OPERATOR 4 >=(date,date) , + OPERATOR 5 >(date,date) , + FUNCTION 1 gbt_date_consistent(internal,date,smallint,oid,internal) , + FUNCTION 2 gbt_date_union(bytea,internal) , + FUNCTION 3 gbt_date_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_date_penalty(internal,internal,internal) , + FUNCTION 6 gbt_date_picksplit(internal,internal) , + FUNCTION 7 gbt_date_same(internal,internal,internal); + + +-- +-- Name: gist_float4_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_float4_ops USING gist; + + +-- +-- Name: gist_float4_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_float4_ops + DEFAULT FOR TYPE real USING gist AS + STORAGE gbtreekey8 , + OPERATOR 1 <(real,real) , + OPERATOR 2 <=(real,real) , + OPERATOR 3 =(real,real) , + OPERATOR 4 >=(real,real) , + OPERATOR 5 >(real,real) , + FUNCTION 1 gbt_float4_consistent(internal,real,smallint,oid,internal) , + FUNCTION 2 gbt_float4_union(bytea,internal) , + FUNCTION 3 gbt_float4_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_float4_penalty(internal,internal,internal) , + FUNCTION 6 gbt_float4_picksplit(internal,internal) , + FUNCTION 7 gbt_float4_same(internal,internal,internal); + + +-- +-- Name: gist_float8_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_float8_ops USING gist; + + +-- +-- Name: gist_float8_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_float8_ops + DEFAULT FOR TYPE double precision USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(double precision,double precision) , + OPERATOR 2 <=(double precision,double precision) , + OPERATOR 3 =(double precision,double precision) , + OPERATOR 4 >=(double precision,double precision) , + OPERATOR 5 >(double precision,double precision) , + FUNCTION 1 gbt_float8_consistent(internal,double precision,smallint,oid,internal) , + FUNCTION 2 gbt_float8_union(bytea,internal) , + FUNCTION 3 gbt_float8_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_float8_penalty(internal,internal,internal) , + FUNCTION 6 gbt_float8_picksplit(internal,internal) , + FUNCTION 7 gbt_float8_same(internal,internal,internal); + + +-- +-- Name: gist_inet_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_inet_ops USING gist; + + +-- +-- Name: gist_inet_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_inet_ops + DEFAULT FOR TYPE inet USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(inet,inet) , + OPERATOR 2 <=(inet,inet) , + OPERATOR 3 =(inet,inet) , + OPERATOR 4 >=(inet,inet) , + OPERATOR 5 >(inet,inet) , + FUNCTION 1 gbt_inet_consistent(internal,inet,smallint,oid,internal) , + FUNCTION 2 gbt_inet_union(bytea,internal) , + FUNCTION 3 gbt_inet_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_inet_penalty(internal,internal,internal) , + FUNCTION 6 gbt_inet_picksplit(internal,internal) , + FUNCTION 7 gbt_inet_same(internal,internal,internal); + + +-- +-- Name: gist_int2_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_int2_ops USING gist; + + +-- +-- Name: gist_int2_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_int2_ops + DEFAULT FOR TYPE smallint USING gist AS + STORAGE gbtreekey4 , + OPERATOR 1 <(smallint,smallint) , + OPERATOR 2 <=(smallint,smallint) , + OPERATOR 3 =(smallint,smallint) , + OPERATOR 4 >=(smallint,smallint) , + OPERATOR 5 >(smallint,smallint) , + FUNCTION 1 gbt_int2_consistent(internal,smallint,smallint,oid,internal) , + FUNCTION 2 gbt_int2_union(bytea,internal) , + FUNCTION 3 gbt_int2_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_int2_penalty(internal,internal,internal) , + FUNCTION 6 gbt_int2_picksplit(internal,internal) , + FUNCTION 7 gbt_int2_same(internal,internal,internal); + + +-- +-- Name: gist_int4_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_int4_ops USING gist; + + +-- +-- Name: gist_int4_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_int4_ops + DEFAULT FOR TYPE integer USING gist AS + STORAGE gbtreekey8 , + OPERATOR 1 <(integer,integer) , + OPERATOR 2 <=(integer,integer) , + OPERATOR 3 =(integer,integer) , + OPERATOR 4 >=(integer,integer) , + OPERATOR 5 >(integer,integer) , + FUNCTION 1 gbt_int4_consistent(internal,integer,smallint,oid,internal) , + FUNCTION 2 gbt_int4_union(bytea,internal) , + FUNCTION 3 gbt_int4_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_int4_penalty(internal,internal,internal) , + FUNCTION 6 gbt_int4_picksplit(internal,internal) , + FUNCTION 7 gbt_int4_same(internal,internal,internal); + + +-- +-- Name: gist_int8_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_int8_ops USING gist; + + +-- +-- Name: gist_int8_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_int8_ops + DEFAULT FOR TYPE bigint USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(bigint,bigint) , + OPERATOR 2 <=(bigint,bigint) , + OPERATOR 3 =(bigint,bigint) , + OPERATOR 4 >=(bigint,bigint) , + OPERATOR 5 >(bigint,bigint) , + FUNCTION 1 gbt_int8_consistent(internal,bigint,smallint,oid,internal) , + FUNCTION 2 gbt_int8_union(bytea,internal) , + FUNCTION 3 gbt_int8_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_int8_penalty(internal,internal,internal) , + FUNCTION 6 gbt_int8_picksplit(internal,internal) , + FUNCTION 7 gbt_int8_same(internal,internal,internal); + + +-- +-- Name: gist_interval_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_interval_ops USING gist; + + +-- +-- Name: gist_interval_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_interval_ops + DEFAULT FOR TYPE interval USING gist AS + STORAGE gbtreekey32 , + OPERATOR 1 <(interval,interval) , + OPERATOR 2 <=(interval,interval) , + OPERATOR 3 =(interval,interval) , + OPERATOR 4 >=(interval,interval) , + OPERATOR 5 >(interval,interval) , + FUNCTION 1 gbt_intv_consistent(internal,interval,smallint,oid,internal) , + FUNCTION 2 gbt_intv_union(bytea,internal) , + FUNCTION 3 gbt_intv_compress(internal) , + FUNCTION 4 gbt_intv_decompress(internal) , + FUNCTION 5 gbt_intv_penalty(internal,internal,internal) , + FUNCTION 6 gbt_intv_picksplit(internal,internal) , + FUNCTION 7 gbt_intv_same(internal,internal,internal); + + +-- +-- Name: gist_macaddr_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_macaddr_ops USING gist; + + +-- +-- Name: gist_macaddr_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_macaddr_ops + DEFAULT FOR TYPE macaddr USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(macaddr,macaddr) , + OPERATOR 2 <=(macaddr,macaddr) , + OPERATOR 3 =(macaddr,macaddr) , + OPERATOR 4 >=(macaddr,macaddr) , + OPERATOR 5 >(macaddr,macaddr) , + FUNCTION 1 gbt_macad_consistent(internal,macaddr,smallint,oid,internal) , + FUNCTION 2 gbt_macad_union(bytea,internal) , + FUNCTION 3 gbt_macad_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_macad_penalty(internal,internal,internal) , + FUNCTION 6 gbt_macad_picksplit(internal,internal) , + FUNCTION 7 gbt_macad_same(internal,internal,internal); + + +-- +-- Name: gist_numeric_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_numeric_ops USING gist; + + +-- +-- Name: gist_numeric_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_numeric_ops + DEFAULT FOR TYPE numeric USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(numeric,numeric) , + OPERATOR 2 <=(numeric,numeric) , + OPERATOR 3 =(numeric,numeric) , + OPERATOR 4 >=(numeric,numeric) , + OPERATOR 5 >(numeric,numeric) , + FUNCTION 1 gbt_numeric_consistent(internal,numeric,smallint,oid,internal) , + FUNCTION 2 gbt_numeric_union(bytea,internal) , + FUNCTION 3 gbt_numeric_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_numeric_penalty(internal,internal,internal) , + FUNCTION 6 gbt_numeric_picksplit(internal,internal) , + FUNCTION 7 gbt_numeric_same(internal,internal,internal); + + +-- +-- Name: gist_oid_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_oid_ops USING gist; + + +-- +-- Name: gist_oid_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_oid_ops + DEFAULT FOR TYPE oid USING gist AS + STORAGE gbtreekey8 , + OPERATOR 1 <(oid,oid) , + OPERATOR 2 <=(oid,oid) , + OPERATOR 3 =(oid,oid) , + OPERATOR 4 >=(oid,oid) , + OPERATOR 5 >(oid,oid) , + FUNCTION 1 gbt_oid_consistent(internal,oid,smallint,oid,internal) , + FUNCTION 2 gbt_oid_union(bytea,internal) , + FUNCTION 3 gbt_oid_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_oid_penalty(internal,internal,internal) , + FUNCTION 6 gbt_oid_picksplit(internal,internal) , + FUNCTION 7 gbt_oid_same(internal,internal,internal); + + +-- +-- Name: gist_text_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_text_ops USING gist; + + +-- +-- Name: gist_text_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_text_ops + DEFAULT FOR TYPE text USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(text,text) , + OPERATOR 2 <=(text,text) , + OPERATOR 3 =(text,text) , + OPERATOR 4 >=(text,text) , + OPERATOR 5 >(text,text) , + FUNCTION 1 gbt_text_consistent(internal,text,smallint,oid,internal) , + FUNCTION 2 gbt_text_union(bytea,internal) , + FUNCTION 3 gbt_text_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_text_penalty(internal,internal,internal) , + FUNCTION 6 gbt_text_picksplit(internal,internal) , + FUNCTION 7 gbt_text_same(internal,internal,internal); + + +-- +-- Name: gist_time_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_time_ops USING gist; + + +-- +-- Name: gist_time_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_time_ops + DEFAULT FOR TYPE time without time zone USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(time without time zone,time without time zone) , + OPERATOR 2 <=(time without time zone,time without time zone) , + OPERATOR 3 =(time without time zone,time without time zone) , + OPERATOR 4 >=(time without time zone,time without time zone) , + OPERATOR 5 >(time without time zone,time without time zone) , + FUNCTION 1 gbt_time_consistent(internal,time without time zone,smallint,oid,internal) , + FUNCTION 2 gbt_time_union(bytea,internal) , + FUNCTION 3 gbt_time_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_time_penalty(internal,internal,internal) , + FUNCTION 6 gbt_time_picksplit(internal,internal) , + FUNCTION 7 gbt_time_same(internal,internal,internal); + + +-- +-- Name: gist_timestamp_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_timestamp_ops USING gist; + + +-- +-- Name: gist_timestamp_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_timestamp_ops + DEFAULT FOR TYPE timestamp without time zone USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(timestamp without time zone,timestamp without time zone) , + OPERATOR 2 <=(timestamp without time zone,timestamp without time zone) , + OPERATOR 3 =(timestamp without time zone,timestamp without time zone) , + OPERATOR 4 >=(timestamp without time zone,timestamp without time zone) , + OPERATOR 5 >(timestamp without time zone,timestamp without time zone) , + FUNCTION 1 gbt_ts_consistent(internal,timestamp without time zone,smallint,oid,internal) , + FUNCTION 2 gbt_ts_union(bytea,internal) , + FUNCTION 3 gbt_ts_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_ts_penalty(internal,internal,internal) , + FUNCTION 6 gbt_ts_picksplit(internal,internal) , + FUNCTION 7 gbt_ts_same(internal,internal,internal); + + +-- +-- Name: gist_timestamptz_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_timestamptz_ops USING gist; + + +-- +-- Name: gist_timestamptz_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_timestamptz_ops + DEFAULT FOR TYPE timestamp with time zone USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(timestamp with time zone,timestamp with time zone) , + OPERATOR 2 <=(timestamp with time zone,timestamp with time zone) , + OPERATOR 3 =(timestamp with time zone,timestamp with time zone) , + OPERATOR 4 >=(timestamp with time zone,timestamp with time zone) , + OPERATOR 5 >(timestamp with time zone,timestamp with time zone) , + FUNCTION 1 gbt_tstz_consistent(internal,timestamp with time zone,smallint,oid,internal) , + FUNCTION 2 gbt_ts_union(bytea,internal) , + FUNCTION 3 gbt_tstz_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_ts_penalty(internal,internal,internal) , + FUNCTION 6 gbt_ts_picksplit(internal,internal) , + FUNCTION 7 gbt_ts_same(internal,internal,internal); + + +-- +-- Name: gist_timetz_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_timetz_ops USING gist; + + +-- +-- Name: gist_timetz_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_timetz_ops + DEFAULT FOR TYPE time with time zone USING gist AS + STORAGE gbtreekey16 , + OPERATOR 1 <(time with time zone,time with time zone) , + OPERATOR 2 <=(time with time zone,time with time zone) , + OPERATOR 3 =(time with time zone,time with time zone) , + OPERATOR 4 >=(time with time zone,time with time zone) , + OPERATOR 5 >(time with time zone,time with time zone) , + FUNCTION 1 gbt_timetz_consistent(internal,time with time zone,smallint,oid,internal) , + FUNCTION 2 gbt_time_union(bytea,internal) , + FUNCTION 3 gbt_timetz_compress(internal) , + FUNCTION 4 gbt_decompress(internal) , + FUNCTION 5 gbt_time_penalty(internal,internal,internal) , + FUNCTION 6 gbt_time_picksplit(internal,internal) , + FUNCTION 7 gbt_time_same(internal,internal,internal); + + +-- +-- Name: gist_vbit_ops; Type: OPERATOR FAMILY; Schema: public; Owner: - +-- + +CREATE OPERATOR FAMILY gist_vbit_ops USING gist; + + +-- +-- Name: gist_vbit_ops; Type: OPERATOR CLASS; Schema: public; Owner: - +-- + +CREATE OPERATOR CLASS gist_vbit_ops + DEFAULT FOR TYPE bit varying USING gist AS + STORAGE gbtreekey_var , + OPERATOR 1 <(bit varying,bit varying) , + OPERATOR 2 <=(bit varying,bit varying) , + OPERATOR 3 =(bit varying,bit varying) , + OPERATOR 4 >=(bit varying,bit varying) , + OPERATOR 5 >(bit varying,bit varying) , + FUNCTION 1 gbt_bit_consistent(internal,bit,smallint,oid,internal) , + FUNCTION 2 gbt_bit_union(bytea,internal) , + FUNCTION 3 gbt_bit_compress(internal) , + FUNCTION 4 gbt_var_decompress(internal) , + FUNCTION 5 gbt_bit_penalty(internal,internal,internal) , + FUNCTION 6 gbt_bit_picksplit(internal,internal) , + FUNCTION 7 gbt_bit_same(internal,internal,internal); + + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: acls; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE acls ( + id integer NOT NULL, + address inet NOT NULL, + netmask inet NOT NULL, + k character varying(255) NOT NULL, + v character varying(255) +); + + +-- +-- Name: acls_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE acls_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: acls_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE acls_id_seq OWNED BY acls.id; + + +-- +-- Name: changeset_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE changeset_tags ( + changeset_id bigint NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL +); + + +-- +-- Name: changesets; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE changesets ( + id bigint NOT NULL, + user_id bigint NOT NULL, + created_at timestamp without time zone NOT NULL, + min_lat integer, + max_lat integer, + min_lon integer, + max_lon integer, + closed_at timestamp without time zone NOT NULL, + num_changes integer DEFAULT 0 NOT NULL +); + + +-- +-- Name: changesets_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE changesets_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: changesets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE changesets_id_seq OWNED BY changesets.id; + + +-- +-- Name: client_applications; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE client_applications ( + id integer NOT NULL, + name character varying(255), + url character varying(255), + support_url character varying(255), + callback_url character varying(255), + key character varying(50), + secret character varying(50), + user_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + allow_read_prefs boolean DEFAULT false NOT NULL, + allow_write_prefs boolean DEFAULT false NOT NULL, + allow_write_diary boolean DEFAULT false NOT NULL, + allow_write_api boolean DEFAULT false NOT NULL, + allow_read_gpx boolean DEFAULT false NOT NULL, + allow_write_gpx boolean DEFAULT false NOT NULL +); + + +-- +-- Name: client_applications_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE client_applications_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: client_applications_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE client_applications_id_seq OWNED BY client_applications.id; + + +-- +-- Name: countries; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE countries ( + id integer NOT NULL, + code character varying(2) NOT NULL, + min_lat double precision NOT NULL, + max_lat double precision NOT NULL, + min_lon double precision NOT NULL, + max_lon double precision NOT NULL +); + + +-- +-- Name: countries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE countries_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: countries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE countries_id_seq OWNED BY countries.id; + + +-- +-- Name: current_node_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_node_tags ( + node_id bigint NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL +); + + +-- +-- Name: current_nodes; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_nodes ( + id bigint NOT NULL, + latitude integer NOT NULL, + longitude integer NOT NULL, + changeset_id bigint NOT NULL, + visible boolean NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + tile bigint NOT NULL, + version bigint NOT NULL +); + + +-- +-- Name: current_nodes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE current_nodes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: current_nodes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE current_nodes_id_seq OWNED BY current_nodes.id; + + +-- +-- Name: current_relation_members; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_relation_members ( + relation_id bigint NOT NULL, + member_type nwr_enum NOT NULL, + member_id bigint NOT NULL, + member_role character varying(255) NOT NULL, + sequence_id integer DEFAULT 0 NOT NULL +); + + +-- +-- Name: current_relation_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_relation_tags ( + relation_id bigint NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL +); + + +-- +-- Name: current_relations; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_relations ( + id bigint NOT NULL, + changeset_id bigint NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + visible boolean NOT NULL, + version bigint NOT NULL +); + + +-- +-- Name: current_relations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE current_relations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: current_relations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE current_relations_id_seq OWNED BY current_relations.id; + + +-- +-- Name: current_way_nodes; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_way_nodes ( + way_id bigint NOT NULL, + node_id bigint NOT NULL, + sequence_id bigint NOT NULL +); + + +-- +-- Name: current_way_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_way_tags ( + way_id bigint NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL +); + + +-- +-- Name: current_ways; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE current_ways ( + id bigint NOT NULL, + changeset_id bigint NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + visible boolean NOT NULL, + version bigint NOT NULL +); + + +-- +-- Name: current_ways_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE current_ways_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: current_ways_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE current_ways_id_seq OWNED BY current_ways.id; + + +-- +-- Name: diary_comments; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE diary_comments ( + id bigint NOT NULL, + diary_entry_id bigint NOT NULL, + user_id bigint NOT NULL, + body text NOT NULL, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + visible boolean DEFAULT true NOT NULL +); + + +-- +-- Name: diary_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE diary_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: diary_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE diary_comments_id_seq OWNED BY diary_comments.id; + + +-- +-- Name: diary_entries; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE diary_entries ( + id bigint NOT NULL, + user_id bigint NOT NULL, + title character varying(255) NOT NULL, + body text NOT NULL, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + latitude double precision, + longitude double precision, + language_code character varying(255) DEFAULT 'en'::character varying NOT NULL, + visible boolean DEFAULT true NOT NULL +); + + +-- +-- Name: diary_entries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE diary_entries_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: diary_entries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE diary_entries_id_seq OWNED BY diary_entries.id; + + +-- +-- Name: friends; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE friends ( + id bigint NOT NULL, + user_id bigint NOT NULL, + friend_user_id bigint NOT NULL +); + + +-- +-- Name: friends_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE friends_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: friends_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE friends_id_seq OWNED BY friends.id; + + +-- +-- Name: gps_points; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE gps_points ( + altitude double precision, + trackid integer NOT NULL, + latitude integer NOT NULL, + longitude integer NOT NULL, + gpx_id bigint NOT NULL, + "timestamp" timestamp without time zone, + tile bigint +); + + +-- +-- Name: gpx_file_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE gpx_file_tags ( + gpx_id bigint DEFAULT 0 NOT NULL, + tag character varying(255) NOT NULL, + id bigint NOT NULL +); + + +-- +-- Name: gpx_file_tags_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE gpx_file_tags_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: gpx_file_tags_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE gpx_file_tags_id_seq OWNED BY gpx_file_tags.id; + + +-- +-- Name: gpx_files; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE gpx_files ( + id bigint NOT NULL, + user_id bigint NOT NULL, + visible boolean DEFAULT true NOT NULL, + name character varying(255) DEFAULT ''::character varying NOT NULL, + size bigint, + latitude double precision, + longitude double precision, + "timestamp" timestamp without time zone NOT NULL, + description character varying(255) DEFAULT ''::character varying NOT NULL, + inserted boolean NOT NULL, + visibility gpx_visibility_enum DEFAULT 'public'::gpx_visibility_enum NOT NULL +); + + +-- +-- Name: gpx_files_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE gpx_files_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: gpx_files_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE gpx_files_id_seq OWNED BY gpx_files.id; + + +-- +-- Name: languages; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE languages ( + code character varying(255) NOT NULL, + english_name character varying(255) NOT NULL, + native_name character varying(255) +); + + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE messages ( + id bigint NOT NULL, + from_user_id bigint NOT NULL, + title character varying(255) NOT NULL, + body text NOT NULL, + sent_on timestamp without time zone NOT NULL, + message_read boolean DEFAULT false NOT NULL, + to_user_id bigint NOT NULL, + to_user_visible boolean DEFAULT true NOT NULL, + from_user_visible boolean DEFAULT true NOT NULL +); + + +-- +-- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE messages_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE messages_id_seq OWNED BY messages.id; + + +-- +-- Name: node_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE node_tags ( + node_id bigint NOT NULL, + version bigint NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL +); + + +-- +-- Name: nodes; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE nodes ( + node_id bigint NOT NULL, + latitude integer NOT NULL, + longitude integer NOT NULL, + changeset_id bigint NOT NULL, + visible boolean NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + tile bigint NOT NULL, + version bigint NOT NULL, + redaction_id integer +); + + +-- +-- Name: oauth_nonces; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE oauth_nonces ( + id integer NOT NULL, + nonce character varying(255), + "timestamp" integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: oauth_nonces_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE oauth_nonces_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: oauth_nonces_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE oauth_nonces_id_seq OWNED BY oauth_nonces.id; + + +-- +-- Name: oauth_tokens; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE oauth_tokens ( + id integer NOT NULL, + user_id integer, + type character varying(20), + client_application_id integer, + token character varying(50), + secret character varying(50), + authorized_at timestamp without time zone, + invalidated_at timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone, + allow_read_prefs boolean DEFAULT false NOT NULL, + allow_write_prefs boolean DEFAULT false NOT NULL, + allow_write_diary boolean DEFAULT false NOT NULL, + allow_write_api boolean DEFAULT false NOT NULL, + allow_read_gpx boolean DEFAULT false NOT NULL, + allow_write_gpx boolean DEFAULT false NOT NULL, + callback_url character varying(255), + verifier character varying(20) +); + + +-- +-- Name: oauth_tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE oauth_tokens_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: oauth_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE oauth_tokens_id_seq OWNED BY oauth_tokens.id; + + +-- +-- Name: relation_members; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE relation_members ( + relation_id bigint DEFAULT 0 NOT NULL, + member_type nwr_enum NOT NULL, + member_id bigint NOT NULL, + member_role character varying(255) NOT NULL, + version bigint DEFAULT 0 NOT NULL, + sequence_id integer DEFAULT 0 NOT NULL +); + + +-- +-- Name: relation_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE relation_tags ( + relation_id bigint DEFAULT 0 NOT NULL, + k character varying(255) DEFAULT ''::character varying NOT NULL, + v character varying(255) DEFAULT ''::character varying NOT NULL, + version bigint NOT NULL +); + + +-- +-- Name: relations; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE relations ( + relation_id bigint DEFAULT 0 NOT NULL, + changeset_id bigint NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + version bigint NOT NULL, + visible boolean DEFAULT true NOT NULL, + redaction_id integer +); + + +-- +-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE schema_migrations ( + version character varying(255) NOT NULL +); + + +-- +-- Name: sessions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE sessions ( + id integer NOT NULL, + session_id character varying(255), + data text, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: sessions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE sessions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: sessions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE sessions_id_seq OWNED BY sessions.id; + + +-- +-- Name: user_blocks; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE user_blocks ( + id integer NOT NULL, + user_id bigint NOT NULL, + creator_id bigint NOT NULL, + reason text NOT NULL, + ends_at timestamp without time zone NOT NULL, + needs_view boolean DEFAULT false NOT NULL, + revoker_id bigint, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: user_blocks_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE user_blocks_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_blocks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE user_blocks_id_seq OWNED BY user_blocks.id; + + +-- +-- Name: user_preferences; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE user_preferences ( + user_id bigint NOT NULL, + k character varying(255) NOT NULL, + v character varying(255) NOT NULL +); + + +-- +-- Name: user_roles; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE user_roles ( + id integer NOT NULL, + user_id bigint NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone, + role user_role_enum NOT NULL, + granter_id bigint NOT NULL +); + + +-- +-- Name: user_roles_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE user_roles_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_roles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE user_roles_id_seq OWNED BY user_roles.id; + + +-- +-- Name: user_tokens; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE user_tokens ( + id bigint NOT NULL, + user_id bigint NOT NULL, + token character varying(255) NOT NULL, + expiry timestamp without time zone NOT NULL, + referer text +); + + +-- +-- Name: user_tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE user_tokens_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE user_tokens_id_seq OWNED BY user_tokens.id; + + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE users ( + email character varying(255) NOT NULL, + id bigint NOT NULL, + pass_crypt character varying(255) NOT NULL, + creation_time timestamp without time zone NOT NULL, + display_name character varying(255) DEFAULT ''::character varying NOT NULL, + data_public boolean DEFAULT false NOT NULL, + description text DEFAULT ''::text NOT NULL, + home_lat double precision, + home_lon double precision, + home_zoom smallint DEFAULT 3, + nearby integer DEFAULT 50, + pass_salt character varying(255), + image text, + email_valid boolean DEFAULT false NOT NULL, + new_email character varying(255), + creation_ip character varying(255), + languages character varying(255), + status user_status_enum DEFAULT 'pending'::user_status_enum NOT NULL, + terms_agreed timestamp without time zone, + consider_pd boolean DEFAULT false NOT NULL, + preferred_editor character varying(255), + terms_seen boolean DEFAULT false NOT NULL, + openid_url character varying(255) +); + + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE users_id_seq OWNED BY users.id; + + +-- +-- Name: way_nodes; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE way_nodes ( + way_id bigint NOT NULL, + node_id bigint NOT NULL, + version bigint NOT NULL, + sequence_id bigint NOT NULL +); + + +-- +-- Name: way_tags; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE way_tags ( + way_id bigint DEFAULT 0 NOT NULL, + k character varying(255) NOT NULL, + v character varying(255) NOT NULL, + version bigint NOT NULL +); + + +-- +-- Name: ways; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE ways ( + way_id bigint DEFAULT 0 NOT NULL, + changeset_id bigint NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + version bigint NOT NULL, + visible boolean DEFAULT true NOT NULL, + redaction_id integer +); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE acls ALTER COLUMN id SET DEFAULT nextval('acls_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE changesets ALTER COLUMN id SET DEFAULT nextval('changesets_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE client_applications ALTER COLUMN id SET DEFAULT nextval('client_applications_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE countries ALTER COLUMN id SET DEFAULT nextval('countries_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE current_nodes ALTER COLUMN id SET DEFAULT nextval('current_nodes_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE current_relations ALTER COLUMN id SET DEFAULT nextval('current_relations_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE current_ways ALTER COLUMN id SET DEFAULT nextval('current_ways_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE diary_comments ALTER COLUMN id SET DEFAULT nextval('diary_comments_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE diary_entries ALTER COLUMN id SET DEFAULT nextval('diary_entries_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE friends ALTER COLUMN id SET DEFAULT nextval('friends_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE gpx_file_tags ALTER COLUMN id SET DEFAULT nextval('gpx_file_tags_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE gpx_files ALTER COLUMN id SET DEFAULT nextval('gpx_files_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE messages ALTER COLUMN id SET DEFAULT nextval('messages_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE oauth_nonces ALTER COLUMN id SET DEFAULT nextval('oauth_nonces_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE oauth_tokens ALTER COLUMN id SET DEFAULT nextval('oauth_tokens_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE sessions ALTER COLUMN id SET DEFAULT nextval('sessions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE user_blocks ALTER COLUMN id SET DEFAULT nextval('user_blocks_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE user_roles ALTER COLUMN id SET DEFAULT nextval('user_roles_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE user_tokens ALTER COLUMN id SET DEFAULT nextval('user_tokens_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass); + + +-- +-- Name: acls_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY acls + ADD CONSTRAINT acls_pkey PRIMARY KEY (id); + + +-- +-- Name: changesets_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY changesets + ADD CONSTRAINT changesets_pkey PRIMARY KEY (id); + + +-- +-- Name: client_applications_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY client_applications + ADD CONSTRAINT client_applications_pkey PRIMARY KEY (id); + + +-- +-- Name: countries_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY countries + ADD CONSTRAINT countries_pkey PRIMARY KEY (id); + + +-- +-- Name: current_node_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_node_tags + ADD CONSTRAINT current_node_tags_pkey PRIMARY KEY (node_id, k); + + +-- +-- Name: current_nodes_pkey1; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_nodes + ADD CONSTRAINT current_nodes_pkey1 PRIMARY KEY (id); + + +-- +-- Name: current_relation_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_relation_members + ADD CONSTRAINT current_relation_members_pkey PRIMARY KEY (relation_id, member_type, member_id, member_role, sequence_id); + + +-- +-- Name: current_relation_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_relation_tags + ADD CONSTRAINT current_relation_tags_pkey PRIMARY KEY (relation_id, k); + + +-- +-- Name: current_relations_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_relations + ADD CONSTRAINT current_relations_pkey PRIMARY KEY (id); + + +-- +-- Name: current_way_nodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_way_nodes + ADD CONSTRAINT current_way_nodes_pkey PRIMARY KEY (way_id, sequence_id); + + +-- +-- Name: current_way_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_way_tags + ADD CONSTRAINT current_way_tags_pkey PRIMARY KEY (way_id, k); + + +-- +-- Name: current_ways_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY current_ways + ADD CONSTRAINT current_ways_pkey PRIMARY KEY (id); + + +-- +-- Name: diary_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY diary_comments + ADD CONSTRAINT diary_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: diary_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY diary_entries + ADD CONSTRAINT diary_entries_pkey PRIMARY KEY (id); + + +-- +-- Name: friends_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY friends + ADD CONSTRAINT friends_pkey PRIMARY KEY (id); + + +-- +-- Name: gpx_file_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY gpx_file_tags + ADD CONSTRAINT gpx_file_tags_pkey PRIMARY KEY (id); + + +-- +-- Name: gpx_files_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY gpx_files + ADD CONSTRAINT gpx_files_pkey PRIMARY KEY (id); + + +-- +-- Name: languages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY languages + ADD CONSTRAINT languages_pkey PRIMARY KEY (code); + + +-- +-- Name: messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY messages + ADD CONSTRAINT messages_pkey PRIMARY KEY (id); + + +-- +-- Name: node_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY node_tags + ADD CONSTRAINT node_tags_pkey PRIMARY KEY (node_id, version, k); + + +-- +-- Name: nodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY nodes + ADD CONSTRAINT nodes_pkey PRIMARY KEY (node_id, version); + + +-- +-- Name: oauth_nonces_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY oauth_nonces + ADD CONSTRAINT oauth_nonces_pkey PRIMARY KEY (id); + + +-- +-- Name: oauth_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY oauth_tokens + ADD CONSTRAINT oauth_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: relation_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY relation_members + ADD CONSTRAINT relation_members_pkey PRIMARY KEY (relation_id, version, member_type, member_id, member_role, sequence_id); + + +-- +-- Name: relation_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY relation_tags + ADD CONSTRAINT relation_tags_pkey PRIMARY KEY (relation_id, version, k); + + +-- +-- Name: relations_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY relations + ADD CONSTRAINT relations_pkey PRIMARY KEY (relation_id, version); + + +-- +-- Name: sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY sessions + ADD CONSTRAINT sessions_pkey PRIMARY KEY (id); + + +-- +-- Name: user_blocks_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY user_blocks + ADD CONSTRAINT user_blocks_pkey PRIMARY KEY (id); + + +-- +-- Name: user_preferences_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY user_preferences + ADD CONSTRAINT user_preferences_pkey PRIMARY KEY (user_id, k); + + +-- +-- Name: user_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY user_roles + ADD CONSTRAINT user_roles_pkey PRIMARY KEY (id); + + +-- +-- Name: user_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY user_tokens + ADD CONSTRAINT user_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: users_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: way_nodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY way_nodes + ADD CONSTRAINT way_nodes_pkey PRIMARY KEY (way_id, version, sequence_id); + + +-- +-- Name: way_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY way_tags + ADD CONSTRAINT way_tags_pkey PRIMARY KEY (way_id, version, k); + + +-- +-- Name: ways_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY ways + ADD CONSTRAINT ways_pkey PRIMARY KEY (way_id, version); + + +-- +-- Name: acls_k_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX acls_k_idx ON acls USING btree (k); + + +-- +-- Name: changeset_tags_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changeset_tags_id_idx ON changeset_tags USING btree (changeset_id); + + +-- +-- Name: changesets_bbox_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changesets_bbox_idx ON changesets USING gist (min_lat, max_lat, min_lon, max_lon); + + +-- +-- Name: changesets_closed_at_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changesets_closed_at_idx ON changesets USING btree (closed_at); + + +-- +-- Name: changesets_created_at_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changesets_created_at_idx ON changesets USING btree (created_at); + + +-- +-- Name: changesets_user_id_created_at_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changesets_user_id_created_at_idx ON changesets USING btree (user_id, created_at); + + +-- +-- Name: changesets_user_id_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX changesets_user_id_id_idx ON changesets USING btree (user_id, id); + + +-- +-- Name: countries_code_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX countries_code_idx ON countries USING btree (code); + + +-- +-- Name: current_nodes_tile_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_nodes_tile_idx ON current_nodes USING btree (tile); + + +-- +-- Name: current_nodes_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_nodes_timestamp_idx ON current_nodes USING btree ("timestamp"); + + +-- +-- Name: current_relation_members_member_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_relation_members_member_idx ON current_relation_members USING btree (member_type, member_id); + + +-- +-- Name: current_relation_tags_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_relation_tags_id_idx ON current_relation_tags USING btree (relation_id); + + +-- +-- Name: current_relation_tags_v_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_relation_tags_v_idx ON current_relation_tags USING btree (v); + + +-- +-- Name: current_relations_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_relations_timestamp_idx ON current_relations USING btree ("timestamp"); + + +-- +-- Name: current_way_nodes_node_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_way_nodes_node_idx ON current_way_nodes USING btree (node_id); + + +-- +-- Name: current_way_tags_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_way_tags_id_idx ON current_way_tags USING btree (way_id); + + +-- +-- Name: current_way_tags_v_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_way_tags_v_idx ON current_way_tags USING btree (v); + + +-- +-- Name: current_ways_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX current_ways_timestamp_idx ON current_ways USING btree ("timestamp"); + + +-- +-- Name: diary_comment_user_id_created_at_index; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX diary_comment_user_id_created_at_index ON diary_comments USING btree (user_id, created_at); + + +-- +-- Name: diary_comments_entry_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX diary_comments_entry_id_idx ON diary_comments USING btree (diary_entry_id, id); + + +-- +-- Name: diary_entry_created_at_index; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX diary_entry_created_at_index ON diary_entries USING btree (created_at); + + +-- +-- Name: diary_entry_language_code_created_at_index; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX diary_entry_language_code_created_at_index ON diary_entries USING btree (language_code, created_at); + + +-- +-- Name: diary_entry_user_id_created_at_index; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX diary_entry_user_id_created_at_index ON diary_entries USING btree (user_id, created_at); + + +-- +-- Name: friends_user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX friends_user_id_idx ON friends USING btree (user_id); + + +-- +-- Name: gpx_file_tags_gpxid_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX gpx_file_tags_gpxid_idx ON gpx_file_tags USING btree (gpx_id); + + +-- +-- Name: gpx_file_tags_tag_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX gpx_file_tags_tag_idx ON gpx_file_tags USING btree (tag); + + +-- +-- Name: gpx_files_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX gpx_files_timestamp_idx ON gpx_files USING btree ("timestamp"); + + +-- +-- Name: gpx_files_user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX gpx_files_user_id_idx ON gpx_files USING btree (user_id); + + +-- +-- Name: gpx_files_visible_visibility_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX gpx_files_visible_visibility_idx ON gpx_files USING btree (visible, visibility); + + +-- +-- Name: index_client_applications_on_key; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_client_applications_on_key ON client_applications USING btree (key); + + +-- +-- Name: index_oauth_nonces_on_nonce_and_timestamp; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_oauth_nonces_on_nonce_and_timestamp ON oauth_nonces USING btree (nonce, "timestamp"); + + +-- +-- Name: index_oauth_tokens_on_token; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_oauth_tokens_on_token ON oauth_tokens USING btree (token); + + +-- +-- Name: index_user_blocks_on_user_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_user_blocks_on_user_id ON user_blocks USING btree (user_id); + + +-- +-- Name: messages_from_user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX messages_from_user_id_idx ON messages USING btree (from_user_id); + + +-- +-- Name: messages_to_user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX messages_to_user_id_idx ON messages USING btree (to_user_id); + + +-- +-- Name: nodes_changeset_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX nodes_changeset_id_idx ON nodes USING btree (changeset_id); + + +-- +-- Name: nodes_tile_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX nodes_tile_idx ON nodes USING btree (tile); + + +-- +-- Name: nodes_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX nodes_timestamp_idx ON nodes USING btree ("timestamp"); + + +-- +-- Name: nodes_uid_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX nodes_uid_idx ON nodes USING btree (node_id); + + +-- +-- Name: points_gpxid_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX points_gpxid_idx ON gps_points USING btree (gpx_id); + + +-- +-- Name: points_tile_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX points_tile_idx ON gps_points USING btree (tile); + + +-- +-- Name: relation_members_member_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX relation_members_member_idx ON relation_members USING btree (member_type, member_id); + + +-- +-- Name: relation_tags_id_version_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX relation_tags_id_version_idx ON relation_tags USING btree (relation_id, version); + + +-- +-- Name: relations_changeset_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX relations_changeset_id_idx ON relations USING btree (changeset_id); + + +-- +-- Name: relations_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX relations_timestamp_idx ON relations USING btree ("timestamp"); + + +-- +-- Name: sessions_session_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX sessions_session_id_idx ON sessions USING btree (session_id); + + +-- +-- Name: unique_schema_migrations; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations USING btree (version); + + +-- +-- Name: user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX user_id_idx ON friends USING btree (friend_user_id); + + +-- +-- Name: user_openid_url_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX user_openid_url_idx ON users USING btree (openid_url); + + +-- +-- Name: user_roles_id_role_unique; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX user_roles_id_role_unique ON user_roles USING btree (user_id, role); + + +-- +-- Name: user_tokens_token_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX user_tokens_token_idx ON user_tokens USING btree (token); + + +-- +-- Name: user_tokens_user_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX user_tokens_user_id_idx ON user_tokens USING btree (user_id); + + +-- +-- Name: users_display_name_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX users_display_name_idx ON users USING btree (display_name); + + +-- +-- Name: users_email_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX users_email_idx ON users USING btree (email); + + +-- +-- Name: way_nodes_node_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX way_nodes_node_idx ON way_nodes USING btree (node_id); + + +-- +-- Name: way_tags_id_version_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX way_tags_id_version_idx ON way_tags USING btree (way_id, version); + + +-- +-- Name: ways_changeset_id_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX ways_changeset_id_idx ON ways USING btree (changeset_id); + + +-- +-- Name: ways_timestamp_idx; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX ways_timestamp_idx ON ways USING btree ("timestamp"); + + +-- +-- Name: changeset_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY changeset_tags + ADD CONSTRAINT changeset_tags_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: changesets_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY changesets + ADD CONSTRAINT changesets_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: client_applications_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY client_applications + ADD CONSTRAINT client_applications_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: current_node_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_node_tags + ADD CONSTRAINT current_node_tags_id_fkey FOREIGN KEY (node_id) REFERENCES current_nodes(id); + + +-- +-- Name: current_nodes_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_nodes + ADD CONSTRAINT current_nodes_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: current_relation_members_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_relation_members + ADD CONSTRAINT current_relation_members_id_fkey FOREIGN KEY (relation_id) REFERENCES current_relations(id); + + +-- +-- Name: current_relation_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_relation_tags + ADD CONSTRAINT current_relation_tags_id_fkey FOREIGN KEY (relation_id) REFERENCES current_relations(id); + + +-- +-- Name: current_relations_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_relations + ADD CONSTRAINT current_relations_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: current_way_nodes_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_way_nodes + ADD CONSTRAINT current_way_nodes_id_fkey FOREIGN KEY (way_id) REFERENCES current_ways(id); + + +-- +-- Name: current_way_nodes_node_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_way_nodes + ADD CONSTRAINT current_way_nodes_node_id_fkey FOREIGN KEY (node_id) REFERENCES current_nodes(id); + + +-- +-- Name: current_way_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_way_tags + ADD CONSTRAINT current_way_tags_id_fkey FOREIGN KEY (way_id) REFERENCES current_ways(id); + + +-- +-- Name: current_ways_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY current_ways + ADD CONSTRAINT current_ways_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: diary_comments_diary_entry_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY diary_comments + ADD CONSTRAINT diary_comments_diary_entry_id_fkey FOREIGN KEY (diary_entry_id) REFERENCES diary_entries(id); + + +-- +-- Name: diary_comments_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY diary_comments + ADD CONSTRAINT diary_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: diary_entries_language_code_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY diary_entries + ADD CONSTRAINT diary_entries_language_code_fkey FOREIGN KEY (language_code) REFERENCES languages(code); + + +-- +-- Name: diary_entries_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY diary_entries + ADD CONSTRAINT diary_entries_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: friends_friend_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY friends + ADD CONSTRAINT friends_friend_user_id_fkey FOREIGN KEY (friend_user_id) REFERENCES users(id); + + +-- +-- Name: friends_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY friends + ADD CONSTRAINT friends_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: gps_points_gpx_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY gps_points + ADD CONSTRAINT gps_points_gpx_id_fkey FOREIGN KEY (gpx_id) REFERENCES gpx_files(id); + + +-- +-- Name: gpx_file_tags_gpx_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY gpx_file_tags + ADD CONSTRAINT gpx_file_tags_gpx_id_fkey FOREIGN KEY (gpx_id) REFERENCES gpx_files(id); + + +-- +-- Name: gpx_files_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY gpx_files + ADD CONSTRAINT gpx_files_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: messages_from_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY messages + ADD CONSTRAINT messages_from_user_id_fkey FOREIGN KEY (from_user_id) REFERENCES users(id); + + +-- +-- Name: messages_to_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY messages + ADD CONSTRAINT messages_to_user_id_fkey FOREIGN KEY (to_user_id) REFERENCES users(id); + + +-- +-- Name: node_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY node_tags + ADD CONSTRAINT node_tags_id_fkey FOREIGN KEY (node_id, version) REFERENCES nodes(node_id, version); + + +-- +-- Name: nodes_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY nodes + ADD CONSTRAINT nodes_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: oauth_tokens_client_application_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY oauth_tokens + ADD CONSTRAINT oauth_tokens_client_application_id_fkey FOREIGN KEY (client_application_id) REFERENCES client_applications(id); + + +-- +-- Name: oauth_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY oauth_tokens + ADD CONSTRAINT oauth_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: relation_members_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY relation_members + ADD CONSTRAINT relation_members_id_fkey FOREIGN KEY (relation_id, version) REFERENCES relations(relation_id, version); + + +-- +-- Name: relation_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY relation_tags + ADD CONSTRAINT relation_tags_id_fkey FOREIGN KEY (relation_id, version) REFERENCES relations(relation_id, version); + + +-- +-- Name: relations_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY relations + ADD CONSTRAINT relations_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- Name: user_blocks_moderator_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_blocks + ADD CONSTRAINT user_blocks_moderator_id_fkey FOREIGN KEY (creator_id) REFERENCES users(id); + + +-- +-- Name: user_blocks_revoker_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_blocks + ADD CONSTRAINT user_blocks_revoker_id_fkey FOREIGN KEY (revoker_id) REFERENCES users(id); + + +-- +-- Name: user_blocks_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_blocks + ADD CONSTRAINT user_blocks_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: user_preferences_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_preferences + ADD CONSTRAINT user_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: user_roles_granter_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_roles + ADD CONSTRAINT user_roles_granter_id_fkey FOREIGN KEY (granter_id) REFERENCES users(id); + + +-- +-- Name: user_roles_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_roles + ADD CONSTRAINT user_roles_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: user_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_tokens + ADD CONSTRAINT user_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id); + + +-- +-- Name: way_nodes_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY way_nodes + ADD CONSTRAINT way_nodes_id_fkey FOREIGN KEY (way_id, version) REFERENCES ways(way_id, version); + + +-- +-- Name: way_tags_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY way_tags + ADD CONSTRAINT way_tags_id_fkey FOREIGN KEY (way_id, version) REFERENCES ways(way_id, version); + + +-- +-- Name: ways_changeset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY ways + ADD CONSTRAINT ways_changeset_id_fkey FOREIGN KEY (changeset_id) REFERENCES changesets(id); + + +-- +-- PostgreSQL database dump complete +-- + +INSERT INTO schema_migrations (version) VALUES ('1'); + +INSERT INTO schema_migrations (version) VALUES ('2'); + +INSERT INTO schema_migrations (version) VALUES ('3'); + +INSERT INTO schema_migrations (version) VALUES ('4'); + +INSERT INTO schema_migrations (version) VALUES ('5'); + +INSERT INTO schema_migrations (version) VALUES ('6'); + +INSERT INTO schema_migrations (version) VALUES ('7'); + +INSERT INTO schema_migrations (version) VALUES ('8'); + +INSERT INTO schema_migrations (version) VALUES ('9'); + +INSERT INTO schema_migrations (version) VALUES ('10'); + +INSERT INTO schema_migrations (version) VALUES ('11'); + +INSERT INTO schema_migrations (version) VALUES ('12'); + +INSERT INTO schema_migrations (version) VALUES ('13'); + +INSERT INTO schema_migrations (version) VALUES ('14'); + +INSERT INTO schema_migrations (version) VALUES ('15'); + +INSERT INTO schema_migrations (version) VALUES ('16'); + +INSERT INTO schema_migrations (version) VALUES ('17'); + +INSERT INTO schema_migrations (version) VALUES ('18'); + +INSERT INTO schema_migrations (version) VALUES ('19'); + +INSERT INTO schema_migrations (version) VALUES ('20'); + +INSERT INTO schema_migrations (version) VALUES ('21'); + +INSERT INTO schema_migrations (version) VALUES ('22'); + +INSERT INTO schema_migrations (version) VALUES ('23'); + +INSERT INTO schema_migrations (version) VALUES ('24'); + +INSERT INTO schema_migrations (version) VALUES ('25'); + +INSERT INTO schema_migrations (version) VALUES ('26'); + +INSERT INTO schema_migrations (version) VALUES ('27'); + +INSERT INTO schema_migrations (version) VALUES ('28'); + +INSERT INTO schema_migrations (version) VALUES ('29'); + +INSERT INTO schema_migrations (version) VALUES ('30'); + +INSERT INTO schema_migrations (version) VALUES ('31'); + +INSERT INTO schema_migrations (version) VALUES ('32'); + +INSERT INTO schema_migrations (version) VALUES ('33'); + +INSERT INTO schema_migrations (version) VALUES ('34'); + +INSERT INTO schema_migrations (version) VALUES ('35'); + +INSERT INTO schema_migrations (version) VALUES ('36'); + +INSERT INTO schema_migrations (version) VALUES ('37'); + +INSERT INTO schema_migrations (version) VALUES ('38'); + +INSERT INTO schema_migrations (version) VALUES ('39'); + +INSERT INTO schema_migrations (version) VALUES ('40'); + +INSERT INTO schema_migrations (version) VALUES ('41'); + +INSERT INTO schema_migrations (version) VALUES ('42'); + +INSERT INTO schema_migrations (version) VALUES ('43'); + +INSERT INTO schema_migrations (version) VALUES ('44'); + +INSERT INTO schema_migrations (version) VALUES ('45'); + +INSERT INTO schema_migrations (version) VALUES ('46'); + +INSERT INTO schema_migrations (version) VALUES ('47'); + +INSERT INTO schema_migrations (version) VALUES ('48'); + +INSERT INTO schema_migrations (version) VALUES ('49'); + +INSERT INTO schema_migrations (version) VALUES ('50'); + +INSERT INTO schema_migrations (version) VALUES ('51'); + +INSERT INTO schema_migrations (version) VALUES ('52'); + +INSERT INTO schema_migrations (version) VALUES ('20100513171259'); + +INSERT INTO schema_migrations (version) VALUES ('20100910084426'); + +INSERT INTO schema_migrations (version) VALUES ('20101114011429'); + +INSERT INTO schema_migrations (version) VALUES ('20110322001319'); + +INSERT INTO schema_migrations (version) VALUES ('20100516124737'); + +INSERT INTO schema_migrations (version) VALUES ('20110925112722'); \ No newline at end of file diff --git a/bin/osmosis/script/contrib/apidb_0.6_osmosis_xid_indexing.sql b/bin/osmosis/script/contrib/apidb_0.6_osmosis_xid_indexing.sql new file mode 100644 index 0000000..c4decc6 --- /dev/null +++ b/bin/osmosis/script/contrib/apidb_0.6_osmosis_xid_indexing.sql @@ -0,0 +1,28 @@ +-- This script creates a function and indexes that allow osmosis to efficiently query based on transaction ids. +CREATE OR REPLACE FUNCTION xid_to_int4(t xid) + RETURNS integer AS +$BODY$ + DECLARE + tl bigint; + ti int; + BEGIN + tl := t; + + IF tl >= 2147483648 THEN + tl := tl - 4294967296; + END IF; + + ti := tl; + + RETURN ti; + END; +$BODY$ +LANGUAGE 'plpgsql' IMMUTABLE STRICT; + + +DROP INDEX IF EXISTS nodes_xmin_idx; +DROP INDEX IF EXISTS ways_xmin_idx; +DROP INDEX IF EXISTS relations_xmin_idx; +CREATE INDEX nodes_xmin_idx ON nodes USING btree ((xid_to_int4(xmin))); +CREATE INDEX ways_xmin_idx ON ways USING btree ((xid_to_int4(xmin))); +CREATE INDEX relations_xmin_idx ON relations USING btree ((xid_to_int4(xmin))); diff --git a/bin/osmosis/script/contrib/dump_apidb.sh b/bin/osmosis/script/contrib/dump_apidb.sh new file mode 100755 index 0000000..4ef9fd9 --- /dev/null +++ b/bin/osmosis/script/contrib/dump_apidb.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/bin/pg_dump -O -v -f "apidb_0.6.sql" api06 diff --git a/bin/osmosis/script/contrib/replicate_osm_file.sh b/bin/osmosis/script/contrib/replicate_osm_file.sh new file mode 100755 index 0000000..bfa9546 --- /dev/null +++ b/bin/osmosis/script/contrib/replicate_osm_file.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +# This script automates the replication of changes into an offline osm file for a specific area of interest. This allows an up-to-date local snapshot of an area to be maintained. + +# The name of the replicated file. +OSM_FILE=myfile.osm.gz + +# The name of the temp file to create during processing (Note: must have the same extension as OSM_FILE to ensure the same compression method is used. +TEMP_OSM_FILE=tmp.osm.gz + +# The directory containing the state associated with the --read-change-interval task previously initiated with the --read-change-interval-init task. +WORKING_DIRECTORY=./ + +# The bounding box to maintain. +LEFT=-180 +BOTTOM=-90 +RIGHT=180 +TOP=90 + +# The osmosis command. +CMD="osmosis -q" + +# Launch the osmosis process. +$CMD --read-change-interval $WORKING_DIRECTORY --read-xml $OSM_FILE --apply-change --bounding-box left=$LEFT bottom=$BOTTOM right=$RIGHT top=$TOP --write-xml $TEMP_OSM_FILE + +STATUS=$? + +# Verify that osmosis ran successfully. +if [ "$STATUS" -ne "0" ]; then + + echo "Osmosis failed, aborting." + exit $STATUS + +fi + +mv $TEMP_OSM_FILE $OSM_FILE + diff --git a/bin/osmosis/script/fix_line_endings.sh b/bin/osmosis/script/fix_line_endings.sh new file mode 100755 index 0000000..60a9e1a --- /dev/null +++ b/bin/osmosis/script/fix_line_endings.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +find . -iname "*.java" -exec dos2unix -U '{}' \; +find . -iname "*.xml" -exec dos2unix -U '{}' \; +find . -iname "*.txt" -exec dos2unix -U '{}' \; +find . -iname "*.osm" -exec dos2unix -U '{}' \; +find . -iname "*.osc" -exec dos2unix -U '{}' \; + +find . -iname "*.java" -exec svn propset svn:eol-style native '{}' \; +find . -iname "*.xml" -exec svn propset svn:eol-style native '{}' \; +find . -iname "*.txt" -exec svn propset svn:eol-style native '{}' \; +find . -iname "*.osm" -exec svn propset svn:eol-style native '{}' \; +find . -iname "*.osc" -exec svn propset svn:eol-style native '{}' \; + diff --git a/bin/osmosis/script/munin/README b/bin/osmosis/script/munin/README new file mode 100644 index 0000000..24063d8 --- /dev/null +++ b/bin/osmosis/script/munin/README @@ -0,0 +1,7 @@ +to activate the munin plugins + - copy "osm_replication_lag" to "/usr/share/munin/plugins" + - make "/usr/share/munin/plugins/osm_replication_lag" executable + - symlink "/usr/share/munin/plugins/osm_replication_lag" to "/etc/munin/plugins" + - copy "osm_replication.conf" to "/etc/munin/plugin-conf.d" + - edit "/etc/munin/plugin-conf.d/osm_replication.conf" and set the workingDirectory + - restart the munin-node diff --git a/bin/osmosis/script/munin/osm_replication.conf b/bin/osmosis/script/munin/osm_replication.conf new file mode 100644 index 0000000..f5d9caf --- /dev/null +++ b/bin/osmosis/script/munin/osm_replication.conf @@ -0,0 +1,15 @@ +[osm*] + +# the osmosis invocation may take some time +timeout 60 + +# the system user that has access to the working directory, if it'S different +# from "munin" +#user osm + +# path to the osmosis binary. if not set, osmosis is assumed to be in $PATH +#env.osmosis /opt/osmosis/bin/osmosis + +# working directory of the osmosis replication. +# this must be set to make the munin plugin work +#env.workingDirectory /path/to/state.txt diff --git a/bin/osmosis/script/munin/osm_replication_lag b/bin/osmosis/script/munin/osm_replication_lag new file mode 100755 index 0000000..2f35c70 --- /dev/null +++ b/bin/osmosis/script/munin/osm_replication_lag @@ -0,0 +1,35 @@ +#!/bin/sh +# -*- sh -*- + +# load the munin plugin helper +. $MUNIN_LIBDIR/plugins/plugin.sh + +# if no workingDirectory has been configures +if [ ! $workingDirectory ]; then + # exit with an error + echo "no workingDirectory configured" >&2 + exit 1 +fi + +# path to osmosis binary +[ $osmosis ] || osmosis="osmosis" + +# configuration section +if [ "$1" = "config" ]; then + + echo 'graph_title OSM PostGIS Database Replag' + echo 'graph_args --base 1000' + echo 'graph_vlabel seconds behind main database' + echo 'graph_category osm' + + echo 'lag.label replication lag' + echo 'lag.draw LINE' + + exit 0 +fi + +# invoke osmosis to calculate the replication lag +lag=$($osmosis --read-replication-lag workingDirectory="$workingDirectory" 2>/dev/null) +echo "lag.value $lag" + +exit 0 diff --git a/bin/osmosis/script/pgsimple_load_0.6.sql b/bin/osmosis/script/pgsimple_load_0.6.sql new file mode 100644 index 0000000..2358efe --- /dev/null +++ b/bin/osmosis/script/pgsimple_load_0.6.sql @@ -0,0 +1,67 @@ +-- Drop all primary keys and indexes to improve load speed. +ALTER TABLE nodes DROP CONSTRAINT pk_nodes; +ALTER TABLE ways DROP CONSTRAINT pk_ways; +ALTER TABLE way_nodes DROP CONSTRAINT pk_way_nodes; +ALTER TABLE relations DROP CONSTRAINT pk_relations; +ALTER TABLE relation_members DROP CONSTRAINT pk_relation_members; +DROP INDEX idx_node_tags_node_id; +DROP INDEX idx_nodes_geom; +DROP INDEX idx_way_tags_way_id; +DROP INDEX idx_way_nodes_node_id; +DROP INDEX idx_relation_tags_relation_id; +DROP INDEX idx_ways_bbox; +DROP INDEX idx_ways_linestring; + +-- Comment these out if the COPY files include bbox or linestring column values. +SELECT DropGeometryColumn('ways', 'bbox'); +SELECT DropGeometryColumn('ways', 'linestring'); + +-- Import the table data from the data files using the fast COPY method. +\copy users FROM 'users.txt' +\copy nodes FROM 'nodes.txt' +\copy node_tags FROM 'node_tags.txt' +\copy ways FROM 'ways.txt' +\copy way_tags FROM 'way_tags.txt' +\copy way_nodes FROM 'way_nodes.txt' +\copy relations FROM 'relations.txt' +\copy relation_tags FROM 'relation_tags.txt' +\copy relation_members FROM 'relation_members.txt' + +-- Add the primary keys and indexes back again (except the way bbox index). +ALTER TABLE ONLY nodes ADD CONSTRAINT pk_nodes PRIMARY KEY (id); +ALTER TABLE ONLY ways ADD CONSTRAINT pk_ways PRIMARY KEY (id); +ALTER TABLE ONLY way_nodes ADD CONSTRAINT pk_way_nodes PRIMARY KEY (way_id, sequence_id); +ALTER TABLE ONLY relations ADD CONSTRAINT pk_relations PRIMARY KEY (id); +ALTER TABLE ONLY relation_members ADD CONSTRAINT pk_relation_members PRIMARY KEY (relation_id, sequence_id); +CREATE INDEX idx_node_tags_node_id ON node_tags USING btree (node_id); +CREATE INDEX idx_nodes_geom ON nodes USING gist (geom); +CREATE INDEX idx_way_tags_way_id ON way_tags USING btree (way_id); +CREATE INDEX idx_way_nodes_node_id ON way_nodes USING btree (node_id); +CREATE INDEX idx_relation_tags_relation_id ON relation_tags USING btree (relation_id); + +-- Comment these out if the COPY files include bbox or linestring column values. +SELECT AddGeometryColumn('ways', 'bbox', 4326, 'GEOMETRY', 2); +SELECT AddGeometryColumn('ways', 'linestring', 4326, 'GEOMETRY', 2); + +-- Comment these out if the COPY files include bbox or linestring column values. +-- Update the bbox column of the way table. +UPDATE ways SET bbox = ( + SELECT ST_Envelope(ST_Collect(geom)) + FROM nodes JOIN way_nodes ON way_nodes.node_id = nodes.id + WHERE way_nodes.way_id = ways.id +); +-- Update the linestring column of the way table. +UPDATE ways w SET linestring = ( + SELECT ST_MakeLine(c.geom) AS way_line FROM ( + SELECT n.geom AS geom + FROM nodes n INNER JOIN way_nodes wn ON n.id = wn.node_id + WHERE (wn.way_id = w.id) ORDER BY wn.sequence_id + ) c +) + +-- Index the way bounding box column. +CREATE INDEX idx_ways_bbox ON ways USING gist (bbox); +CREATE INDEX idx_ways_linestring ON ways USING gist (linestring); + +-- Perform database maintenance due to large database changes. +VACUUM ANALYZE; diff --git a/bin/osmosis/script/pgsimple_schema_0.6.sql b/bin/osmosis/script/pgsimple_schema_0.6.sql new file mode 100644 index 0000000..5d8abf3 --- /dev/null +++ b/bin/osmosis/script/pgsimple_schema_0.6.sql @@ -0,0 +1,141 @@ +-- Database creation script for the simple PostgreSQL schema. + +-- Drop all tables if they exist. +DROP TABLE IF EXISTS actions; +DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS nodes; +DROP TABLE IF EXISTS node_tags; +DROP TABLE IF EXISTS ways; +DROP TABLE IF EXISTS way_nodes; +DROP TABLE IF EXISTS way_tags; +DROP TABLE IF EXISTS relations; +DROP TABLE IF EXISTS relation_members; +DROP TABLE IF EXISTS relation_tags; +DROP TABLE IF EXISTS schema_info; + +-- Drop all stored procedures if they exist. +DROP FUNCTION IF EXISTS osmosisUpdate(); + + +-- Create a table which will contain a single row defining the current schema version. +CREATE TABLE schema_info ( + version integer NOT NULL +); + + +-- Create a table for users. +CREATE TABLE users ( + id int NOT NULL, + name text NOT NULL +); + + +-- Create a table for nodes. +CREATE TABLE nodes ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL +); +-- Add a postgis point column holding the location of the node. +SELECT AddGeometryColumn('nodes', 'geom', 4326, 'POINT', 2); + + +-- Create a table for node tags. +CREATE TABLE node_tags ( + node_id bigint NOT NULL, + k text NOT NULL, + v text NOT NULL +); + + +-- Create a table for ways. +CREATE TABLE ways ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL +); + + +-- Create a table for representing way to node relationships. +CREATE TABLE way_nodes ( + way_id bigint NOT NULL, + node_id bigint NOT NULL, + sequence_id int NOT NULL +); + + +-- Create a table for way tags. +CREATE TABLE way_tags ( + way_id bigint NOT NULL, + k text NOT NULL, + v text +); + + +-- Create a table for relations. +CREATE TABLE relations ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL +); + +-- Create a table for representing relation member relationships. +CREATE TABLE relation_members ( + relation_id bigint NOT NULL, + member_id bigint NOT NULL, + member_type character(1) NOT NULL, + member_role text NOT NULL, + sequence_id int NOT NULL +); + + +-- Create a table for relation tags. +CREATE TABLE relation_tags ( + relation_id bigint NOT NULL, + k text NOT NULL, + v text NOT NULL +); + + +-- Configure the schema version. +INSERT INTO schema_info (version) VALUES (5); + + +-- Add primary keys to tables. +ALTER TABLE ONLY schema_info ADD CONSTRAINT pk_schema_info PRIMARY KEY (version); + +ALTER TABLE ONLY users ADD CONSTRAINT pk_users PRIMARY KEY (id); + +ALTER TABLE ONLY nodes ADD CONSTRAINT pk_nodes PRIMARY KEY (id); + +ALTER TABLE ONLY ways ADD CONSTRAINT pk_ways PRIMARY KEY (id); + +ALTER TABLE ONLY way_nodes ADD CONSTRAINT pk_way_nodes PRIMARY KEY (way_id, sequence_id); + +ALTER TABLE ONLY relations ADD CONSTRAINT pk_relations PRIMARY KEY (id); + +ALTER TABLE ONLY relation_members ADD CONSTRAINT pk_relation_members PRIMARY KEY (relation_id, sequence_id); + + +-- Add indexes to tables. +CREATE INDEX idx_node_tags_node_id ON node_tags USING btree (node_id); +CREATE INDEX idx_nodes_geom ON nodes USING gist (geom); + +CREATE INDEX idx_way_tags_way_id ON way_tags USING btree (way_id); +CREATE INDEX idx_way_nodes_node_id ON way_nodes USING btree (node_id); + +CREATE INDEX idx_relation_tags_relation_id ON relation_tags USING btree (relation_id); + + +-- Create stored procedures. +CREATE FUNCTION osmosisUpdate() RETURNS void AS $$ +DECLARE +BEGIN +END; +$$ LANGUAGE plpgsql; diff --git a/bin/osmosis/script/pgsimple_schema_0.6_action.sql b/bin/osmosis/script/pgsimple_schema_0.6_action.sql new file mode 100644 index 0000000..6e02afb --- /dev/null +++ b/bin/osmosis/script/pgsimple_schema_0.6_action.sql @@ -0,0 +1,15 @@ +-- Add an action table for the purpose of capturing all actions applied to a database. +-- The table is populated during application of a changeset, then osmosisUpdate is called, +-- then the table is cleared all within a single database transaction. +-- The contents of this table can be used to update derivative tables by customising the +-- osmosisUpdate stored procedure. + +-- Create a table for actions. +CREATE TABLE actions ( + data_type character(1) NOT NULL, + action character(1) NOT NULL, + id bigint NOT NULL +); + +-- Add primary key. +ALTER TABLE ONLY actions ADD CONSTRAINT pk_actions PRIMARY KEY (data_type, id); diff --git a/bin/osmosis/script/pgsimple_schema_0.6_bbox.sql b/bin/osmosis/script/pgsimple_schema_0.6_bbox.sql new file mode 100644 index 0000000..868d8a1 --- /dev/null +++ b/bin/osmosis/script/pgsimple_schema_0.6_bbox.sql @@ -0,0 +1,6 @@ +-- Add a postgis GEOMETRY column to the way table for the purpose of indexing the location of the way. +-- This will contain a bounding box surrounding the extremities of the way. +SELECT AddGeometryColumn('ways', 'bbox', 4326, 'GEOMETRY', 2); + +-- Add an index to the bbox column. +CREATE INDEX idx_ways_bbox ON ways USING gist (bbox); \ No newline at end of file diff --git a/bin/osmosis/script/pgsimple_schema_0.6_linestring.sql b/bin/osmosis/script/pgsimple_schema_0.6_linestring.sql new file mode 100644 index 0000000..24755d3 --- /dev/null +++ b/bin/osmosis/script/pgsimple_schema_0.6_linestring.sql @@ -0,0 +1,5 @@ +-- Add a postgis GEOMETRY column to the way table for the purpose of storing the full linestring of the way. +SELECT AddGeometryColumn('ways', 'linestring', 4326, 'GEOMETRY', 2); + +-- Add an index to the bbox column. +CREATE INDEX idx_ways_linestring ON ways USING gist (linestring); diff --git a/bin/osmosis/script/pgsnapshot_and_pgsimple.txt b/bin/osmosis/script/pgsnapshot_and_pgsimple.txt new file mode 100644 index 0000000..167c4ef --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_and_pgsimple.txt @@ -0,0 +1,18 @@ +Both the pgsimple and pgsnapshot schemas are PostgreSQL schemas utilising postgis extensions that are capable of storing snapshots of OSM data. +No history is maintained. +They can be populated by osmosis and kept up to date with osmosis daily, hourly and minute changesets. + +The pgsimple and pgsnapshot schemas are forked versions of the same schema. +Up to version 5 of the schema they were known as the "simple" schema. +The pgsimple schema is the "simple" schema and is unchanged. +Since version 6, the pgsnapshot schema has deviated to include all tag information in hstore "tags" columns inside the parent entity tables. + +The purpose of the pgsimple schema is to provide a simplistic and generic schema for storing OSM data in a PostGIS format. +The purpose of the pgsnapshot schema is similar but maximises performance through CLUSTERed indexes and embedded tag data. It imposes additional programming complexity. + +The following scripts are available for both schemas: +pgxxx_schema_0.x.sql - The schema creation script. +pgxxx_schema_0.x_bbox.sql - A script for adding way bbox column support. +pgxxx_schema_0.x_linestring.sql - A script for adding way linestring column support. +pgxxx_schema_0.x_action.sql - A script for adding an action table which is populated during changeset processing to allow derivative tables to be kept up to date. +pgxxx_load_0.x.sql - A script for importing PostgreSQL "COPY" files as produced by the osmosis --write-pgxxx-dump tasks. diff --git a/bin/osmosis/script/pgsnapshot_load_0.6.sql b/bin/osmosis/script/pgsnapshot_load_0.6.sql new file mode 100644 index 0000000..bfde11c --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_load_0.6.sql @@ -0,0 +1,82 @@ +-- Allow data loss (but not corruption) in the case of a power outage. This is okay because we need to re-run the script anyways. +SET synchronous_commit TO OFF; + +-- Drop all primary keys and indexes to improve load speed. +ALTER TABLE nodes DROP CONSTRAINT pk_nodes; +ALTER TABLE ways DROP CONSTRAINT pk_ways; +ALTER TABLE way_nodes DROP CONSTRAINT pk_way_nodes; +ALTER TABLE relations DROP CONSTRAINT pk_relations; +ALTER TABLE relation_members DROP CONSTRAINT pk_relation_members; +DROP INDEX idx_nodes_geom; +DROP INDEX idx_way_nodes_node_id; +DROP INDEX idx_relation_members_member_id_and_type; +DROP INDEX idx_ways_bbox; +DROP INDEX idx_ways_linestring; + +-- Uncomment these out if bbox or linestring columns are needed and the COPY +-- files do not include them. If you want these columns you should use the +-- enableBboxBuilder or enableLinestringBuilder options to --write-pgsql-dump +-- as they are faster than the following SQL. + +/*SELECT DropGeometryColumn('ways', 'bbox'); +SELECT DropGeometryColumn('ways', 'linestring');*/ + +-- Import the table data from the data files using the fast COPY method. +\copy users FROM 'users.txt' +\copy nodes FROM 'nodes.txt' +\copy ways FROM 'ways.txt' +\copy way_nodes FROM 'way_nodes.txt' +\copy relations FROM 'relations.txt' +\copy relation_members FROM 'relation_members.txt' + +-- Add the primary keys and indexes back again (except the way bbox index). +ALTER TABLE ONLY nodes ADD CONSTRAINT pk_nodes PRIMARY KEY (id); +ALTER TABLE ONLY ways ADD CONSTRAINT pk_ways PRIMARY KEY (id); +ALTER TABLE ONLY way_nodes ADD CONSTRAINT pk_way_nodes PRIMARY KEY (way_id, sequence_id); +ALTER TABLE ONLY relations ADD CONSTRAINT pk_relations PRIMARY KEY (id); +ALTER TABLE ONLY relation_members ADD CONSTRAINT pk_relation_members PRIMARY KEY (relation_id, sequence_id); +CREATE INDEX idx_nodes_geom ON nodes USING gist (geom); +CREATE INDEX idx_way_nodes_node_id ON way_nodes USING btree (node_id); +CREATE INDEX idx_relation_members_member_id_and_type ON relation_members USING btree (member_id, member_type); + +ALTER TABLE ONLY nodes CLUSTER ON idx_nodes_geom; +ALTER TABLE ONLY way_nodes CLUSTER ON pk_way_nodes; +ALTER TABLE ONLY relation_members CLUSTER ON pk_relation_members; + +-- Uncomment these if bbox or linestring columns are needed and the COPY files do not include them. + +-- Update the bbox column of the way table. +/*SELECT AddGeometryColumn('ways', 'bbox', 4326, 'GEOMETRY', 2); +UPDATE ways SET bbox = ( + SELECT ST_Envelope(ST_Collect(geom)) + FROM nodes JOIN way_nodes ON way_nodes.node_id = nodes.id + WHERE way_nodes.way_id = ways.id +);*/ + +-- Update the linestring column of the way table. +/*SELECT AddGeometryColumn('ways', 'linestring', 4326, 'GEOMETRY', 2); +UPDATE ways w SET linestring = ( + SELECT ST_MakeLine(c.geom) AS way_line FROM ( + SELECT n.geom AS geom + FROM nodes n INNER JOIN way_nodes wn ON n.id = wn.node_id + WHERE (wn.way_id = w.id) ORDER BY wn.sequence_id + ) c +);*/ + +-- Index the way bounding box column. If you don't have one of these columns, comment out the index +CREATE INDEX idx_ways_bbox ON ways USING gist (bbox); +CREATE INDEX idx_ways_linestring ON ways USING gist (linestring); + +ALTER TABLE ONLY ways CLUSTER ON idx_ways_bbox; +ALTER TABLE ONLY ways CLUSTER ON idx_ways_linestring; + +-- Optional: CLUSTER imported tables. CLUSTER takes a significant amount of time to run and a +-- significant amount of free disk space but speeds up some queries. + +--CLUSTER nodes; +--CLUSTER ways; + +-- It is not necessary to CLUSTER way_nodes or relation_members after the initial load but you might want to do so later on + +-- Perform database maintenance due to large database changes. +ANALYZE; diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6.sql b/bin/osmosis/script/pgsnapshot_schema_0.6.sql new file mode 100644 index 0000000..14e1f57 --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6.sql @@ -0,0 +1,170 @@ +-- Database creation script for the snapshot PostgreSQL schema. + +-- Drop all tables if they exist. +DROP TABLE IF EXISTS actions; +DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS nodes; +DROP TABLE IF EXISTS ways; +DROP TABLE IF EXISTS way_nodes; +DROP TABLE IF EXISTS relations; +DROP TABLE IF EXISTS relation_members; +DROP TABLE IF EXISTS schema_info; + +-- Drop all stored procedures if they exist. +DROP FUNCTION IF EXISTS osmosisUpdate(); + + +-- Create a table which will contain a single row defining the current schema version. +CREATE TABLE schema_info ( + version integer NOT NULL +); + + +-- Create a table for users. +CREATE TABLE users ( + id int NOT NULL, + name text NOT NULL +); + + +-- Create a table for nodes. +CREATE TABLE nodes ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL, + tags hstore +); +-- Add a postgis point column holding the location of the node. +SELECT AddGeometryColumn('nodes', 'geom', 4326, 'POINT', 2); + + +-- Create a table for ways. +CREATE TABLE ways ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL, + tags hstore, + nodes bigint[] +); + + +-- Create a table for representing way to node relationships. +CREATE TABLE way_nodes ( + way_id bigint NOT NULL, + node_id bigint NOT NULL, + sequence_id int NOT NULL +); + + +-- Create a table for relations. +CREATE TABLE relations ( + id bigint NOT NULL, + version int NOT NULL, + user_id int NOT NULL, + tstamp timestamp without time zone NOT NULL, + changeset_id bigint NOT NULL, + tags hstore +); + +-- Create a table for representing relation member relationships. +CREATE TABLE relation_members ( + relation_id bigint NOT NULL, + member_id bigint NOT NULL, + member_type character(1) NOT NULL, + member_role text NOT NULL, + sequence_id int NOT NULL +); + + +-- Configure the schema version. +INSERT INTO schema_info (version) VALUES (6); + + +-- Add primary keys to tables. +ALTER TABLE ONLY schema_info ADD CONSTRAINT pk_schema_info PRIMARY KEY (version); + +ALTER TABLE ONLY users ADD CONSTRAINT pk_users PRIMARY KEY (id); + +ALTER TABLE ONLY nodes ADD CONSTRAINT pk_nodes PRIMARY KEY (id); + +ALTER TABLE ONLY ways ADD CONSTRAINT pk_ways PRIMARY KEY (id); + +ALTER TABLE ONLY way_nodes ADD CONSTRAINT pk_way_nodes PRIMARY KEY (way_id, sequence_id); + +ALTER TABLE ONLY relations ADD CONSTRAINT pk_relations PRIMARY KEY (id); + +ALTER TABLE ONLY relation_members ADD CONSTRAINT pk_relation_members PRIMARY KEY (relation_id, sequence_id); + + +-- Add indexes to tables. +CREATE INDEX idx_nodes_geom ON nodes USING gist (geom); + +CREATE INDEX idx_way_nodes_node_id ON way_nodes USING btree (node_id); + +CREATE INDEX idx_relation_members_member_id_and_type ON relation_members USING btree (member_id, member_type); + + +-- Set to cluster nodes by geographical location. +ALTER TABLE ONLY nodes CLUSTER ON idx_nodes_geom; + +-- Set to cluster the tables showing relationship by parent ID and sequence +ALTER TABLE ONLY way_nodes CLUSTER ON pk_way_nodes; +ALTER TABLE ONLY relation_members CLUSTER ON pk_relation_members; + +-- There are no sensible CLUSTER orders for users or relations. +-- Depending on geometry columns different clustings of ways may be desired. + +-- Create the function that provides "unnest" functionality while remaining compatible with 8.3. +CREATE OR REPLACE FUNCTION unnest_bbox_way_nodes() RETURNS void AS $$ +DECLARE + previousId ways.id%TYPE; + currentId ways.id%TYPE; + result bigint[]; + wayNodeRow way_nodes%ROWTYPE; + wayNodes ways.nodes%TYPE; +BEGIN + FOR wayNodes IN SELECT bw.nodes FROM bbox_ways bw LOOP + FOR i IN 1 .. array_upper(wayNodes, 1) LOOP + INSERT INTO bbox_way_nodes (id) VALUES (wayNodes[i]); + END LOOP; + END LOOP; +END; +$$ LANGUAGE plpgsql; + + +-- Create customisable hook function that is called within the replication update transaction. +CREATE FUNCTION osmosisUpdate() RETURNS void AS $$ +DECLARE +BEGIN +END; +$$ LANGUAGE plpgsql; + +-- Manually set statistics for the way_nodes and relation_members table +-- Postgres gets horrible counts of distinct values by sampling random pages +-- and can be off by an 1-2 orders of magnitude + +-- Size of the ways table / size of the way_nodes table +ALTER TABLE way_nodes ALTER COLUMN way_id SET (n_distinct = -0.08); + +-- Size of the nodes table / size of the way_nodes table * 0.998 +-- 0.998 is a factor for nodes not in ways +ALTER TABLE way_nodes ALTER COLUMN node_id SET (n_distinct = -0.83); + +-- API allows a maximum of 2000 nodes/way. Unlikely to impact query plans. +ALTER TABLE way_nodes ALTER COLUMN sequence_id SET (n_distinct = 2000); + +-- Size of the relations table / size of the relation_members table +ALTER TABLE relation_members ALTER COLUMN relation_id SET (n_distinct = -0.09); + +-- Based on June 2013 data +ALTER TABLE relation_members ALTER COLUMN member_id SET (n_distinct = -0.62); + +-- Based on June 2013 data. Unlikely to impact query plans. +ALTER TABLE relation_members ALTER COLUMN member_role SET (n_distinct = 6500); + +-- Based on June 2013 data. Unlikely to impact query plans. +ALTER TABLE relation_members ALTER COLUMN sequence_id SET (n_distinct = 10000); diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6_action.sql b/bin/osmosis/script/pgsnapshot_schema_0.6_action.sql new file mode 100644 index 0000000..6e02afb --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6_action.sql @@ -0,0 +1,15 @@ +-- Add an action table for the purpose of capturing all actions applied to a database. +-- The table is populated during application of a changeset, then osmosisUpdate is called, +-- then the table is cleared all within a single database transaction. +-- The contents of this table can be used to update derivative tables by customising the +-- osmosisUpdate stored procedure. + +-- Create a table for actions. +CREATE TABLE actions ( + data_type character(1) NOT NULL, + action character(1) NOT NULL, + id bigint NOT NULL +); + +-- Add primary key. +ALTER TABLE ONLY actions ADD CONSTRAINT pk_actions PRIMARY KEY (data_type, id); diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6_bbox.sql b/bin/osmosis/script/pgsnapshot_schema_0.6_bbox.sql new file mode 100644 index 0000000..b630842 --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6_bbox.sql @@ -0,0 +1,21 @@ +-- Add a postgis GEOMETRY column to the way table for the purpose of indexing the location of the way. +-- This will contain a bounding box surrounding the extremities of the way. +SELECT AddGeometryColumn('ways', 'bbox', 4326, 'GEOMETRY', 2); + +-- Add an index to the bbox column. +CREATE INDEX idx_ways_bbox ON ways USING gist (bbox); + +-- Cluster table by geographical location. +CLUSTER ways USING idx_ways_bbox; + +-- Create an aggregate function that always returns the first non-NULL item. This is required for bbox queries. +CREATE OR REPLACE FUNCTION first_agg (anyelement, anyelement) +RETURNS anyelement AS $$ + SELECT CASE WHEN $1 IS NULL THEN $2 ELSE $1 END; +$$ LANGUAGE SQL STABLE; + +CREATE AGGREGATE first ( + sfunc = first_agg, + basetype = anyelement, + stype = anyelement +); diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6_linestring.sql b/bin/osmosis/script/pgsnapshot_schema_0.6_linestring.sql new file mode 100644 index 0000000..0a9c4a7 --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6_linestring.sql @@ -0,0 +1,8 @@ +-- Add a postgis GEOMETRY column to the way table for the purpose of storing the full linestring of the way. +SELECT AddGeometryColumn('ways', 'linestring', 4326, 'GEOMETRY', 2); + +-- Add an index to the bbox column. +CREATE INDEX idx_ways_linestring ON ways USING gist (linestring); + +-- Cluster table by geographical location. +CLUSTER ways USING idx_ways_linestring; diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_4-5.sql b/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_4-5.sql new file mode 100644 index 0000000..d667e6b --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_4-5.sql @@ -0,0 +1,5 @@ +-- Add the relation members primary key. +ALTER TABLE ONLY relation_members ADD CONSTRAINT pk_relation_members PRIMARY KEY (relation_id, sequence_id); + +-- Upgrade the schema version. +UPDATE schema_info SET version = 5; \ No newline at end of file diff --git a/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_5-6.sql b/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_5-6.sql new file mode 100644 index 0000000..e9e54fb --- /dev/null +++ b/bin/osmosis/script/pgsnapshot_schema_0.6_upgrade_5-6.sql @@ -0,0 +1,238 @@ +-- Database script for the simple PostgreSQL schema. This script moves all tags into hstore columns. + +-- Create functions for building hstore data. +CREATE OR REPLACE FUNCTION build_node_tags() RETURNS void AS $$ +DECLARE + previousId nodes.id%TYPE; + currentId nodes.id%TYPE; + result hstore; + tagRow node_tags%ROWTYPE; +BEGIN + SET enable_seqscan = false; + SET enable_mergejoin = false; + SET enable_hashjoin = false; + + FOR tagRow IN SELECT * FROM node_tags ORDER BY node_id LOOP + currentId := tagRow.node_id; + + IF currentId <> previousId THEN + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE nodes SET tags = result WHERE id = previousId; + IF ((currentId / 100000) <> (previousId / 100000)) THEN + RAISE INFO 'node id: %', previousId; + END IF; + result := NULL; + END IF; + END IF; + END IF; + + IF result IS NULL THEN + result := tagRow.k => tagRow.v; + ELSE + result := result || (tagRow.k => tagRow.v); + END IF; + + previousId := currentId; + END LOOP; + + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE nodes SET tags = result WHERE id = previousId; + result := NULL; + END IF; + END IF; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION build_way_tags() RETURNS void AS $$ +DECLARE + previousId ways.id%TYPE; + currentId ways.id%TYPE; + result hstore; + tagRow way_tags%ROWTYPE; +BEGIN + SET enable_seqscan = false; + SET enable_mergejoin = false; + SET enable_hashjoin = false; + + FOR tagRow IN SELECT * FROM way_tags ORDER BY way_id LOOP + currentId := tagRow.way_id; + + IF currentId <> previousId THEN + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE ways SET tags = result WHERE id = previousId; + IF ((currentId / 100000) <> (previousId / 100000)) THEN + RAISE INFO 'way id: %', previousId; + END IF; + result := NULL; + END IF; + END IF; + END IF; + + IF result IS NULL THEN + result := tagRow.k => tagRow.v; + ELSE + result := result || (tagRow.k => tagRow.v); + END IF; + + previousId := currentId; + END LOOP; + + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE ways SET tags = result WHERE id = previousId; + result := NULL; + END IF; + END IF; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION build_relation_tags() RETURNS void AS $$ +DECLARE + previousId relations.id%TYPE; + currentId relations.id%TYPE; + result hstore; + tagRow relation_tags%ROWTYPE; +BEGIN + SET enable_seqscan = false; + SET enable_mergejoin = false; + SET enable_hashjoin = false; + + FOR tagRow IN SELECT * FROM relation_tags ORDER BY relation_id LOOP + currentId := tagRow.relation_id; + + IF currentId <> previousId THEN + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE relations SET tags = result WHERE id = previousId; + IF ((currentId / 100000) <> (previousId / 100000)) THEN + RAISE INFO 'relation id: %', previousId; + END IF; + result := NULL; + END IF; + END IF; + END IF; + + IF result IS NULL THEN + result := tagRow.k => tagRow.v; + ELSE + result := result || (tagRow.k => tagRow.v); + END IF; + + previousId := currentId; + END LOOP; + + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE relations SET tags = result WHERE id = previousId; + result := NULL; + END IF; + END IF; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION build_way_nodes() RETURNS void AS $$ +DECLARE + previousId ways.id%TYPE; + currentId ways.id%TYPE; + result bigint[]; + wayNodeRow way_nodes%ROWTYPE; +BEGIN + SET enable_seqscan = false; + SET enable_mergejoin = false; + SET enable_hashjoin = false; + + FOR wayNodeRow IN SELECT * FROM way_nodes ORDER BY way_id, sequence_id LOOP + currentId := wayNodeRow.way_id; + + IF currentId <> previousId THEN + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE ways SET nodes = result WHERE id = previousId; + IF ((currentId / 100000) <> (previousId / 100000)) THEN + RAISE INFO 'way id: %', previousId; + END IF; + result := NULL; + END IF; + END IF; + END IF; + + IF result IS NULL THEN + result = ARRAY[wayNodeRow.node_id]; + ELSE + result = array_append(result, wayNodeRow.node_id); + END IF; + + previousId := currentId; + END LOOP; + + IF previousId IS NOT NULL THEN + IF result IS NOT NULL THEN + UPDATE ways SET nodes = result WHERE id = previousId; + result := NULL; + END IF; + END IF; +END; +$$ LANGUAGE plpgsql; + +-- Add hstore columns to entity tables. +ALTER TABLE nodes ADD COLUMN tags hstore; +ALTER TABLE ways ADD COLUMN tags hstore; +ALTER TABLE relations ADD COLUMN tags hstore; + +-- Populate the hstore columns. +SELECT build_node_tags(); +SELECT build_way_tags(); +SELECT build_relation_tags(); + +-- Remove the hstore functions. +DROP FUNCTION build_node_tags(); +DROP FUNCTION build_way_tags(); +DROP FUNCTION build_relation_tags(); + +-- Drop the now redundant tag tables. +DROP TABLE node_tags; +DROP TABLE way_tags; +DROP TABLE relation_tags; + +-- Add an index allowing relation_members to be queried by member id and type. +CREATE INDEX idx_relation_members_member_id_and_type ON relation_members USING btree (member_id, member_type); + +-- Add the nodes column to the ways table. +ALTER TABLE ways ADD COLUMN nodes bigint[]; + +-- Populate the new nodes column on the ways table. +SELECT build_way_nodes(); +--UPDATE ways w SET nodes = ARRAY(SELECT wn.node_id FROM way_nodes wn WHERE w.id = wn.way_id ORDER BY sequence_id); + +-- Remove the way nodes function. +DROP FUNCTION build_way_nodes(); + +-- Organise data according to geographical location. +CLUSTER nodes USING idx_nodes_geom; +CLUSTER ways USING idx_ways_linestring; + +-- Create the function that provides "unnest" functionality while remaining compatible with 8.3. +CREATE OR REPLACE FUNCTION unnest_bbox_way_nodes() RETURNS void AS $$ +DECLARE + previousId ways.id%TYPE; + currentId ways.id%TYPE; + result bigint[]; + wayNodeRow way_nodes%ROWTYPE; + wayNodes ways.nodes%TYPE; +BEGIN + FOR wayNodes IN SELECT bw.nodes FROM bbox_ways bw LOOP + FOR i IN 1 .. array_upper(wayNodes, 1) LOOP + INSERT INTO bbox_way_nodes (id) VALUES (wayNodes[i]); + END LOOP; + END LOOP; +END; +$$ LANGUAGE plpgsql; + + +-- Update the schema version. +UPDATE schema_info SET version = 6; + +VACUUM ANALYZE;