我刚刚查看了PostgreSQL的宣传页面,我发现了这件小艺术品:

它是“Turtle Style” PostgreSQL 标志。这是多少岁了,PostgreSQL 是否曾经正式使用乌龟而不是大象?这里有什么故事?
所以我最近在一家新公司开始工作,有很多 ArcGIS 用户似乎非常热衷于使用 PostGIS 实例为我们的客户提供一些数据。虽然我对此没有意见,但我们是 95% 的 SQL Server 和 5% 的 Oracle 商店。我们当前的内部 GIS 运行在 SQL Server 上,我还没有听到任何抱怨。
我知道 SQL Server 截至 2012 年有很多改进的空间/几何功能,但是 PostGIS 中是否有任何值得进入新平台的杀手级功能?我试图研究它,但找不到任何真正深入的东西,或者这不完全是偏见。
我想给他们最好的工具来完成他们的工作,但也必须权衡一个事实,即我将从一开始就学习 Postgres/GIS,这本身就是一个完整的旅程。
假设我想将电话号码存储在数据库中。我可以接受来自美国以外的电话号码。我将如何存储这些电话号码?
我们正在构建具有空间数据组件的 Web 应用程序。开始时,我们的空间数据比较将采用给定点并返回匹配的重叠空间多边形。
话虽如此,我们的数据库还有许多其他组件,其中包括您在一般关系数据库中会发现的所有典型内容。
在我们的项目中,我们必须选择要使用的数据库解决方案。
所有项目成员都更熟悉 MySQL 的实现和管理,但所有研究都表明 PostgreSQL 是更好的解决方案 - 特别是在使用 postGIS 的空间数据方面。
我们期望(希望)我们的应用程序将体验大量并发用户的大量操作。
有使用 MySQL 作为空间数据组件的 RDBMS 的经验的任何人有任何长期的建议/经验吗?
除了熟悉之外,使用 PostGIS 是否有任何缺点?
我通过一个复杂的选择查询创建了表CREATE TABLE ... AS SELECT...。如何在此查询中添加自动增量主键?
例如:
create table `user_mv` select `user`.`firstname` as
`firstname`,
`user`.`lastname` as `lastname`,
`user`.`lang` as `lang`,
`user`.`name` as `user_name`,
`group`.`name` as `group_name`
from `user`
inner join `user_groups` on (`user`.`user_id`=`user_groups`.`user_id`)
left join `group` on (`group`.`group_id`=`user_groups`.`group_id`)
where `user`.`lang`=`group`.`lang`
Run Code Online (Sandbox Code Playgroud)
此查询创建一个包含firstname, lastname, lang, username,group_name列的表。我希望它也有一个id作为自动增量主键的列。
有没有办法通过更改此查询来做到这一点?我知道我可以通过在执行此查询后更改表来做到这一点,但是如果有任何方法可以直接在create table语句中执行此操作,我想知道如何执行此操作。
我刚刚查看了一些为8.4 之前的 PostgreSQL编写的旧代码,我看到了一些非常棒的东西。我记得以前有一个自定义函数可以做一些这样的事情,但我忘记了预先的array_agg()样子。回顾一下,现代聚合是这样写的。
SELECT array_agg(x ORDER BY x DESC) FROM foobar;
Run Code Online (Sandbox Code Playgroud)
然而,曾几何时,它是这样写的,
SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC);
Run Code Online (Sandbox Code Playgroud)
所以,我用一些测试数据试了一下..
CREATE TEMP TABLE foobar AS
SELECT * FROM generate_series(1,1e7)
AS t(x);
Run Code Online (Sandbox Code Playgroud)
结果令人惊讶..#OldSchoolCool 方式要快得多:加速了 25%。此外,在没有ORDER 的情况下简化它,表现出同样的缓慢。
# EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Result (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 loops=1)
InitPlan 1 (returns $0)
-> Seq Scan on foobar (cost=0.00..104425.28 rows=6017728 width=32) (actual time=0.032..716.793 rows=10000000 loops=1) …Run Code Online (Sandbox Code Playgroud) 我收到以下关于我在程序中运行的 SQL 查询的错误消息。SQL Server 2005 T-SQL。
异构查询需要为连接设置
ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。(严重性 16)
修复它很容易,设置ANSI_NULLS和ANSI_WARNINGS ON,但我想知道异构查询是什么。谷歌搜索带来了几十个结果,告诉我设置ANSI_NULLS和ANSI_WARNINGS,没有解释这个词的意思。查询是:
UPDATE SRV.DB.DBO.TABLE SET Column=
(SELECT Column
FROM SRV1.DB.DBO.TABLE)
Run Code Online (Sandbox Code Playgroud)
我认为这是由于在一个查询中连接到多个数据库引擎,否则我从未遇到过此错误。
“异构”是否只是指在这种情况下查询两个不同的数据库引擎?
我想使用任何可能的 RDBMS 创建一个数据库。它将有一个包含大约 150 列的表。目标是执行一些其他对象的最近邻搜索。所以它是150维空间中的NNS。
我已经尝试使用一些明显的方法,例如 L1 或 L2 距离,但当然对于包含多行的表需要花费大量时间。我还尝试查看 KD-tree(注意我没有测试它)和 PG-Strom,但它们对于多维数据并不是一个好的解决方案。
我可以使用数学方法(如 KD-tree)或技术方法(如 PG-Strom)以某种方式提高所描述的搜索速度吗?
我将尝试使用任何可以提高 NNS 速度的 RDBMS。但是 MySQL 和 PostgreSQL 是最适合我的 DBMS。
postgresql ×5
mysql ×2
postgis ×2
spatial ×2
sql-server ×2
terminology ×2
aggregate ×1
array ×1
benchmark ×1
ctas ×1
datatypes ×1
errors ×1
performance ×1
primary-key ×1
select ×1
uuid ×1