Примеры использования инструментов PostGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 14 промежуточных версий этого же участника)
Строка 6: Строка 6:


<pre>sudo apt-get install postgis</pre>
<pre>sudo apt-get install postgis</pre>
В Ubuntu 12.04 по-умолчанию все ставится в /usr/share/postgresql/9.1/contrib/postgis-2.0


=== Создание базы ===
=== Создание базы ===
Строка 11: Строка 13:
В шелл (база создатся на пользователя pgsql):
В шелл (база создатся на пользователя pgsql):


<pre>createdb -U postgres testdb</pre>
<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 postgres createdb testdb</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:
Аналогично созданию, только dropdb, вместо createdb
<pre>createdb -U pgsql -T template_postgis testdb</pre>
<pre>dropdb -U postgres testdb</pre>
 
или создание с помощью EXTENSION:
<pre>sudo su - pgsql -c "psql -d testdb -c 'CREATE EXTENSION postgis;'"</pre>
 
===Создание пользователя===
Заходим в базу:
<pre>psql -U pgsql -d testdb</pre>


Создание пользователя
Создание пользователя
Строка 27: Строка 44:
<pre>ALTER DATABASE testdb OWNER TO admin;</pre>
<pre>ALTER DATABASE testdb OWNER TO admin;</pre>


Добавление функций PostGIS
не забудем выйти:
<pre>psql -U pgsql -d testdb -f /usr/local/share/postgis/postgis.sql
<pre>\q</pre>
psql -U pgsql -d testdb -f /usr/local/share/postgis/spatial_ref_sys.sql</pre>


или
===Загрузка данных===
 
<pre>sudo -u postgres psql -d testdb -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql</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 testdb </pre>
psql -U pgsql -f topo250-rus.sql -d testdb </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';