Примеры использования инструментов PostGIS: различия между версиями
(Новая страница: «{{Статья|Черновик}} Еще заготовка шпаргалки Загрузка данных в базу проводится в 2 этапа, …») |
Нет описания правки |
||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 3: | Строка 3: | ||
Еще заготовка шпаргалки | Еще заготовка шпаргалки | ||
=== Установка === | |||
<pre>sudo apt-get install postgis</pre> | |||
В Ubuntu 12.04 по-умолчанию все ставится в /usr/share/postgresql/9.1/contrib/postgis-2.0 | |||
=== Создание базы === | |||
В шелл (база создатся на пользователя pgsql): | |||
<pre>createdb -U pgsql testdb</pre> | |||
или | |||
<pre>sudo -u pgsql createdb testdb</pre> | |||
Добавление функций PostGIS и систем координат (нужно знать, куда установился postgis): | |||
<pre>psql -U pgsql -d testdb -f /usr/local/share/postgis/postgis.sql | |||
psql -U pgsql -d testdb -f /usr/local/share/postgis/spatial_ref_sys.sql</pre> | |||
или | |||
<pre>sudo -u pgsql psql -d testdb -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql | |||
sudo -u pgsql psql -d testdb -f /usr/share/postgresql/9.1/contrib/postgis-2.0/spatial_ref_sys.sql</pre> | |||
или создание базы сразу по темплейту без необходимости знать где postgis: | |||
<pre>createdb -U pgsql -T template_postgis testdb</pre> | |||
или создание с помощью EXTENSION: | |||
<pre>sudo su - pgsql -c "psql -d testdb -c 'CREATE EXTENSION postgis;'"</pre> | |||
===Создание пользователя=== | |||
Заходим в базу: | |||
<pre>psql -U pgsql -d testdb</pre> | |||
Создание пользователя | |||
<pre>CREATE USER admin PASSWORD 'admin';</pre> | |||
Назначение его администратором: | |||
<pre>ALTER DATABASE testdb OWNER TO admin;</pre> | |||
не забудем выйти: | |||
<pre>\q</pre> | |||
===Загрузка данных=== | |||
====shp2pgsql==== | |||
Загрузка данных в базу проводится в 2 этапа, сначала слой выгружается в sql, а затем он грузится в базу | Загрузка данных в базу проводится в 2 этапа, сначала слой выгружается в sql, а затем он грузится в базу | ||
<pre>shp2pgsql -i -D -s 4326 -W cp1251 topo250m-rus.shp > topo250-rus.sql | <pre>shp2pgsql -i -D -s 4326 -W cp1251 topo250m-rus.shp > topo250-rus.sql | ||
psql -U pgsql -f topo250-rus.sql -d | psql -U pgsql -f topo250-rus.sql -d testdb </pre> | ||
</pre> | |||
Разрешение подключаться к | ====ogr2ogr==== | ||
<pre></pre> | |||
===Права=== | |||
Разрешение подключаться к определенной таблице базы пользователю с определенным именем (пользователь уже заведен в базе): | |||
<pre>psql -U pgsql -d gen -c 'GRANT SELECT ON TABLE "topo250m-rus" TO guest;'</pre> | <pre>psql -U pgsql -d gen -c 'GRANT SELECT ON TABLE "topo250m-rus" TO guest;'</pre> | ||
=== Разблокирование базы === | |||
<pre>SELECT bl.pid AS blocked_pid, a.usename AS blocked_user,kl.pid AS blocking_pid, ka.usename AS blocking_user, a.current_query AS blocked_statement | |||
FROM pg_catalog.pg_locks bl | |||
JOIN pg_catalog.pg_stat_activity a ON bl.pid = a.procpi | |||
JOIN pg_catalog.pg_locks kl | |||
JOIN pg_catalog.pg_stat_activity ka ON kl.pid = ka.procpid ON bl.transactionid = kl.transactionid AND bl.pid != kl.pid | |||
WHERE NOT bl.granted;</pre> | |||
и, после получения ID (например 64712) заблокированной базы: | |||
<pre>SELECT pg_terminate_backend(64712);</pre> | |||
=== Удаление базы === | |||
Аналогично созданию, только dropdb, вместо createdb | |||
<pre>dropdb -U postgres testdb</pre> | |||
Если к базе есть подключения, но ее всё равно нужно удалить, нужно сначала удалить подключения: | |||
Если версия PostgreSQL 9.1 и ниже: | |||
<pre>SELECT pg_terminate_backend(pg_stat_activity.procpid) | |||
FROM pg_stat_activity | |||
WHERE pg_stat_activity.datname = 'testdb';</pre> | |||
Если версия PostgreSQL 9.2 и выше: | |||
<pre>SELECT pg_terminate_backend(pg_stat_activity.pid) | |||
FROM pg_stat_activity | |||
WHERE pg_stat_activity.datname = 'testdb';</pre> |
Текущая версия от 08:51, 25 июля 2014
Еще заготовка шпаргалки
Установка
sudo apt-get install postgis
В Ubuntu 12.04 по-умолчанию все ставится в /usr/share/postgresql/9.1/contrib/postgis-2.0
Создание базы
В шелл (база создатся на пользователя pgsql):
createdb -U pgsql testdb
или
sudo -u pgsql createdb testdb
Добавление функций PostGIS и систем координат (нужно знать, куда установился postgis):
psql -U pgsql -d testdb -f /usr/local/share/postgis/postgis.sql psql -U pgsql -d testdb -f /usr/local/share/postgis/spatial_ref_sys.sql
или
sudo -u pgsql psql -d testdb -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql sudo -u pgsql psql -d testdb -f /usr/share/postgresql/9.1/contrib/postgis-2.0/spatial_ref_sys.sql
или создание базы сразу по темплейту без необходимости знать где postgis:
createdb -U pgsql -T template_postgis testdb
или создание с помощью EXTENSION:
sudo su - pgsql -c "psql -d testdb -c 'CREATE EXTENSION postgis;'"
Создание пользователя
Заходим в базу:
psql -U pgsql -d testdb
Создание пользователя
CREATE USER admin PASSWORD 'admin';
Назначение его администратором:
ALTER DATABASE testdb OWNER TO admin;
не забудем выйти:
\q
Загрузка данных
shp2pgsql
Загрузка данных в базу проводится в 2 этапа, сначала слой выгружается в sql, а затем он грузится в базу
shp2pgsql -i -D -s 4326 -W cp1251 topo250m-rus.shp > topo250-rus.sql psql -U pgsql -f topo250-rus.sql -d testdb
ogr2ogr
Права
Разрешение подключаться к определенной таблице базы пользователю с определенным именем (пользователь уже заведен в базе):
psql -U pgsql -d gen -c 'GRANT SELECT ON TABLE "topo250m-rus" TO guest;'
Разблокирование базы
SELECT bl.pid AS blocked_pid, a.usename AS blocked_user,kl.pid AS blocking_pid, ka.usename AS blocking_user, a.current_query AS blocked_statement FROM pg_catalog.pg_locks bl JOIN pg_catalog.pg_stat_activity a ON bl.pid = a.procpi JOIN pg_catalog.pg_locks kl JOIN pg_catalog.pg_stat_activity ka ON kl.pid = ka.procpid ON bl.transactionid = kl.transactionid AND bl.pid != kl.pid WHERE NOT bl.granted;
и, после получения ID (например 64712) заблокированной базы:
SELECT pg_terminate_backend(64712);
Удаление базы
Аналогично созданию, только dropdb, вместо createdb
dropdb -U postgres testdb
Если к базе есть подключения, но ее всё равно нужно удалить, нужно сначала удалить подключения:
Если версия PostgreSQL 9.1 и ниже:
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'testdb';
Если версия PostgreSQL 9.2 и выше:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'testdb';