标签: postgis

PostgreSQL:无法将目录更改为 /root

我正在尝试将表planet_osm_polygon从一个数据库复制osm到另一个数据库test。我su postgres并执行了pg_dump.

问题:但是我收到错误could not change directory to "/root"并且Password:提示出现了两次!有没有办法pg_dump在登录时执行root

root@lalaland:~# su postgres
postgres@lalaland:/root$ pg_dump -h localhost "osm" --table "public.planet_osm_polygon" | 
    psql -h localhost "test" --table "staging.planet_osm_polygon"
could not change directory to "/root"
could not change directory to "/root"
Password: Password:
Run Code Online (Sandbox Code Playgroud)

更新

问题#2:public即使我通过了 flag ,表似乎也被复制到了模式中--table="staging.planet_osm_polygon"。为什么不将其复制到 schema staging

postgresql postgis postgresql-9.1

19
推荐指数
2
解决办法
5万
查看次数

PostGIS 与 SQL Server 的 GIS 数据

所以我最近在一家新公司开始工作,有很多 ArcGIS 用户似乎非常热衷于使用 PostGIS 实例为我们的客户提供一些数据。虽然我对此没有意见,但我们是 95% 的 SQL Server 和 5% 的 Oracle 商店。我们当前的内部 GIS 运行在 SQL Server 上,我还没有听到任何抱怨。

我知道 SQL Server 截至 2012 年有很多改进的空间/几何功能,但是 PostGIS 中是否有任何值得进入新平台的杀手级功能?我试图研究它,但找不到任何真正深入的东西,或者这不完全是偏见。

我想给他们最好的工具来完成他们的工作,但也必须权衡一个事实,即我将从一开始就学习 Postgres/GIS,这本身就是一个完整的旅程。

sql-server database-recommendation spatial postgis

17
推荐指数
2
解决办法
1万
查看次数

PostgreSQL vs. MySQL:空间特征比较

我们正在构建具有空间数据组件的 Web 应用程序。开始时,我们的空间数据比较将采用给定点并返回匹配的重叠空间多边形。

话虽如此,我们的数据库还有许多其他组件,其中包括您在一般关系数据库中会发现的所有典型内容。

在我们的项目中,我们必须选择要使用的数据库解决方案。

所有项目成员都更熟悉 MySQL 的实现和管理,但所有研究都表明 PostgreSQL 是更好的解决方案 - 特别是在使用 postGIS 的空间数据方面。

我们期望(希望)我们的应用程序将体验大量并发用户的大量操作。

有使用 MySQL 作为空间数据组件的 RDBMS 的经验的任何人有任何长期的建议/经验吗?

除了熟悉之外,使用 PostGIS 是否有任何缺点?

mysql postgresql feature-comparison spatial postgis

16
推荐指数
2
解决办法
1万
查看次数

PostgreSQL 复合索引中的列顺序(和查询顺序)

我有一个有 50K 行的表。它实际上是一个 PostGIS 表。

查询有 4 个部分(1 个强制)(3 个可选)

  1. 具有 4 lat,long 的交叉框(地理矩形)(我使用 st_intersects)[强制]
  2. 日期字段上的日期范围(最小值、最大值)
  3. 当前使用 IN( .....) 的文件类型(一组最多 8 个文本值),但如果需要,我可以将其设为临时表。我看到很多人不喜欢IN。
  4. 国家(一个文本值)。

我预计大约有 100 - 4,000 行返回

如果我在表上创建复合索引,我应该先使用哪一列。细粒度的可能是位置(数据分布在世界各地)。我目前将其作为 GIST 索引。

其他索引将是 BTREE。

我的直觉是使用细粒度的,当然最后。例如,只有大约 12 种文件类型,因此对于索引来说这将是非常大的存储桶。

PostgreSQL 和 PostGIS 大师(了解系统内部结构的人)怎么说?


更新:

让我尖锐地回答这个问题。

  1. 我不希望任何人不得不做我应该做的工作。我太尊重你的时间了。所以我将在稍后进行解释分析。
  2. 我所寻找的只是一些指示、技巧和指导方针。
  3. 我读了这篇很棒的小帖子:https : //devcenter.heroku.com/articles/postgresql-indexes#managing-and-maintaining-indexes关于索引
  4. 我通常做的是创建 4 个单独的索引(地理框、国家/地区名称、文件类型和日期),但想看看复合查询会做什么。

请告诉我这些假设是否有误。(我对复合索引的想法很陌生)

  1. 顺序很重要。选择最能减少行的索引作为第一个索引(在我的情况下,位置(地理)是一个简单的多边形或多多边形会做得最好)。
  2. 有时查询会跳过索引。但是,如果我使用键 (#1, #2, #3, #4) 创建一个复合查询,那么即使用户创建了要求 #1, #3 的内容,规划器仍将使用单个复合查询,因为他们订购被维护。
  3. 通常我会创建三个 BTREE 查询和一个 GIST(用于地理类型)。PostGIS 不支持从多个索引类型中创建复合。所以我将不得不使用 GIST 复合索引。但这不应该伤害事情。
  4. 如果我确实创建了一些额外的复合或单值索引,那么规划器就足够聪明,可以选择最聪明的一个......
  5. Country Name 可以有大约 250 个不同的值,并且显然与位置 (geobox) 密切相关,但是如果减少行大小的下一个最佳索引是 file_type,我接下来应该使用它。我不希望用户经常在他们的查询集中使用国家或日期。
  6. 我不必担心创建 …

postgresql postgis

14
推荐指数
1
解决办法
8564
查看次数

在PostgreSQL中存储和查询滚动数据

我有大量的天气模型数据被放入 PostgreSQL 数据库。该机器具有 8 个内核和 16 GB 的 RAM。我正在使用 PostGIS 2.1 运行 PostgreSQL 9.3。每个表都有不同种类的天气数据(温度、露点、风等)。每个表将有 6-7 列:纬度、经度、点几何、高程、模型相关的日期时间以及 1-2 个感兴趣的数据值。数据将主要按时间和高程查询边界框。每个表将有大约 145,757,360 行(早于现在不再相关的数据将被删除)。我粗略估计每个表的大小约为 10 GB,没有索引。(这是 52 字节的数据加上每行 23 字节的开销)。随着新模型数据可用,数据将定期更新/插入。笔记:

所以我正在研究这两个计划:

  1. 简单地按(日期时间,高程)索引和聚类,并为点几何添加一个额外的索引。运行一个常规的 cron 作业来删除旧行、运行vacuum/analyze 和重新集群。
  2. 按日期时间分区,然后按每个表的高程进行聚类和索引,并在几何上有索引。运行常规的 cron 作业以添加新表并删除旧表。

更远,

  • 所以,我知道删除表和删除和清空表的效率要高得多。但是,否则我会看到性能提升吗?
  • 当所有表将被均匀更新和选择直到删除不相关时,分区是否合适(文档表明分区在只选择其中几个时效果最佳)?

传递数据时,选择会比聚集索引更快吗?如果同时发出多个请求,答案是否会改变?

谢谢你。我希望我提供了所有需要的数据。如果没有让我知道,我会添加它。

postgresql database-design partitioning postgis postgresql-9.3

12
推荐指数
1
解决办法
1665
查看次数

按距离排序

如果我有一个关于返回附近咖啡馆的查询:

SELECT * FROM cafes c WHERE (
   ST_DWithin(
   ST_GeographyFromText(
     'SRID=4326;POINT(' || c.longitude || ' ' || c.latitude || ')'
   ),
   ST_GeographyFromText('SRID=4326;POINT(-76.000000 39.000000)'),
     2000
   )
)
Run Code Online (Sandbox Code Playgroud)

如何选择距离以及按距离排序?
有没有比这更有效的方法:

 SELECT id, 
 ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-76.000000 39.000000)'),
             ST_GeographyFromText(
             'SRID=4326;POINT(' || c.longitude || ' ' || c.latitude || ')')      
             ) as distance 
 FROM cafes c
   WHERE (
   ST_DWithin(
     ST_GeographyFromText(
     'SRID=4326;POINT(' || c.longitude || ' ' || c.latitude || ')'
   ),
    ST_GeographyFromText('SRID=4326;POINT(-76.000000 39.000000)'),
   2000
 )
 ) order by distance
Run Code Online (Sandbox Code Playgroud)

postgresql postgis postgresql-9.2 gist-index

11
推荐指数
1
解决办法
5921
查看次数

移动大型 PostgreSQL/PostGIS 数据库

我需要将一个非常大(约 320 GB)的 PostGIS 数据库从server1(PostgreSQL 9.1,PostGIS 1.5)移动并升级到server2(PostgreSQL 9.3,PostGIS 2.1)。

升级过程有据可查。问题是我在server1上没有足够的空间将文件转储到那里,校验它,然后将它复制到server2并验证总和。我试过:

  • 从管道中转储服务器1Server2上使用nc
  • 直接写入转储文件到服务器2,其安装在文件系统server1的使用sshfs

两次转储文件似乎都已损坏。pg_restore在不同的地方打破了这样的错误:

pg_restore: [compress_io] could not uncompress data: incorrect data check

任何人都可以提出更好的方法来完成此移动和升级吗?

更新:尝试过 NFS(并再次尝试 SSHFS)。很明显,这些远程文件系统无法可靠地传输这么多数据。生成的 SQL 文件中明显缺少块,导致导入过程中出现如下语法错误:

ERROR:  invalid input syntax for integer: "8266UPDATE spatial_ref_sys o set auth_name = n.auth_name, auth_srid = n.auth_srid, srtext = n.srtext, proj4text = n.proj4text FROM _pgis_restore_spatial_ref_sys n …
Run Code Online (Sandbox Code Playgroud)

postgresql migration postgis

8
推荐指数
1
解决办法
1445
查看次数

PostgreSQL/PostGIS 9.6 破坏了我的复合索引

在 PostgreSQL 9.2 中,我可以轻松创建具有地理 (postGIS) 类型和整数作为复合索引的索引。但是现在(9.6)它抱怨创建索引,我不明白它提供的提示:

列和数据都已正确创建,Postgres 抱怨创建索引。

ERROR: data type integer has no default operator class for access method "gist" 
HINT: You must specify an operator class for the index 
      or define a default operator class for the data type. 
********** Error**********  
ERROR: data type integer has no default operator class for access method "gist" 
SQL state: 42704 
Hint: You must specify an operator class for the index 
      or define a default operator class for the data type.
Run Code Online (Sandbox Code Playgroud)

模式定义如下: …

postgresql postgis postgresql-9.6

8
推荐指数
1
解决办法
847
查看次数

ST_GeomFromGeoJSON() 导致 postgres 崩溃

我遇到了一个我无法解决的奇怪问题。服务器在执行一些 postgis 相关查询时崩溃。一些调试后,使用实例 提供由PostGIS的,它出现在ST_GEOMFROMGeoJSON()函数引起服务器崩溃。

崩溃:

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
Run Code Online (Sandbox Code Playgroud)

运行正常:

SELECT ST_AsText(
         ST_Transform(
               ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
                                         743265 2967450,743265.625 2967416,743238 2967416))',2249)
         ,4326)
        ) As wgs_geom; 
Run Code Online (Sandbox Code Playgroud)

查看日志时,我发现这些条目与崩溃相关:

2014-11-21 11:27:46 CET LOG:  server process (PID 2377) was terminated by signal 11: Segmentation fault
2014-11-21 11:27:46 CET DETAIL:  Failed process was running: SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
2014-11-21 11:27:46 CET LOG:  terminating any other active server processes
2014-11-21 11:27:46 CET WARNING:  terminating connection because of crash of another server process
2014-11-21 …
Run Code Online (Sandbox Code Playgroud)

postgresql spatial postgis postgresql-9.3

7
推荐指数
1
解决办法
649
查看次数

使用 OVER(PARTITION BY) 限制分区中的结果数

在下面的查询中,为什么我们必须使用WHERE foo.row_num < 3子查询之外的子句foo而不是子查询内的子句来限制从每个 Partition 返回的结果WHERE row_num < 3

询问

SELECT pid, land_type, row_num, road_name, round(CAST(dist_km AS numeric), 2) AS dist_km

FROM (
    SELECT ROW_NUMBER() 
    OVER (
        PARTITION by loc.pid
        ORDER BY ST_Distance(r.the_geom, loc.the_geom)
    ) as row_num,
    loc.pid, loc.land_type, r.road_name, 
    ST_Distance(r.the_geom, loc.the_geom)/1000 as dist_km
    FROM ch05.land AS loc
    LEFT JOIN ch05.road AS r
    ON ST_DWithin(r.the_geom, loc.the_geom, 1000)
    WHERE loc.land_type = 'police station'
) AS foo

WHERE foo.row_num < 3
ORDER BY pid, row_num;
Run Code Online (Sandbox Code Playgroud)

不工作的查询 …

postgresql postgis postgresql-9.1

6
推荐指数
1
解决办法
1万
查看次数