标签: postgresql

PostgreSQL vs. MySQL:空间特征比较

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

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

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

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

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

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

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

mysql postgresql feature-comparison spatial postgis

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

将一列的默认值设置为其他两列值的串联?

我有一个 Postgresql 8.1 数据库。在一张表中,有三列:first_namelast_namedisplay_name

是否可以将 的默认值设置display_namefirst_name + " " + last_name

postgresql

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

如何在 PostgreSQL 中使用 aes-encryption?

我使用以下语句尝试了 aes-encryption:

SELECT encrypt('test', 'key', 'aes');
Run Code Online (Sandbox Code Playgroud)

这有效,但我无法解密该值。我将它插入到数据类型bytea的字段中,但我不确定这是否正确。

SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)

给我错误

错误:函数解密(bytea,未知,未知)不存在第
1 行:选择解密(密码,'key','aes')FROM tabelle WHERE ID = 7; ^
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

这是否真的意味着 encrypt() 是一个现有的函数,但不是decrypt()?我还能如何检索 aes 加密的值?

postgresql encryption functions postgresql-9.1

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

为什么在 psql 中使用 \dt(+) 时看不到我的表 (PostgreSQL)?

我已经按照以下方式donor在架构中创建了表reference

CREATE TABLE reference.donor (
    donor_code smallint PRIMARY KEY,
    donor_name character varying NOT NULL,
    donor_type smallint REFERENCES reference.donor_type (type_id),
    alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code)
);
Run Code Online (Sandbox Code Playgroud)

我已经按照以下方式填充了表格:

INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code)
SELECT donor_code, donor_name, donor_type, alpha_2_code
FROM reference.donor_template;
Run Code Online (Sandbox Code Playgroud)

当我运行时:

\dt+ reference.*
Run Code Online (Sandbox Code Playgroud)

在 psql 我看到reference.donor表:

                          List of relations
  Schema   |      Name      | Type  |  Owner   | Size  | Description 
-----------+----------------+-------+----------+-------+-------------
 reference | donor          | table | postgres | 16 kB | 
 reference | …
Run Code Online (Sandbox Code Playgroud)

schema postgresql psql table

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

为什么 Postgres 中的时区在 0001 年与 UTC 有如此疯狂的偏移?

在 Postgres 9.5 中,我很惊讶地看到在尝试 year 0001(没有 year zero 0000)时看到的结果。

的偏移量-07:52:58

一些示例代码。请注意,我混合使用了TIMESTAMP WITH TIME ZONETIMESTAMP WITHOUT TIME ZONE,所以请仔细阅读。

SET TIME ZONE 'America/Los_Angeles' ;

SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0', 
        TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z', 
        TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ;

("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00")
Run Code Online (Sandbox Code Playgroud)

我对第二个值感到惊讶:0001-12-31 16:07:02-07:52:58 BC. 我知道我们必须America/Los_Angeles在 UTC后八小时后退八小时,偏移量为-08:00. 但不是-08:00偏移量是-07:52:58. 为什么?

UTC下没问题

在 UTC 下输入数据时没有这样的问题。

SET TIME ZONE 'UTC' …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp timezone postgresql-9.5

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

如何将所有表转储到 CSV 以获取 PostgreSQL 架构?

我有一个包含很多模式的数据库,我想将每个表内容转储到 CSV。我知道 COPY 命令,但我不确定如何编写一些脚本来读取模式中的所有表并针对它们执行 COPY。

postgresql backup csv

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

从 CTE 内部调用时未执行 PostgreSQL 函数

只是希望证实我的观察并得到有关为什么会发生这种情况的解释。

我有一个函数定义为:

CREATE OR REPLACE FUNCTION "public"."__post_users_id_coin" ("coins" integer, "userid" integer) RETURNS TABLE (id integer) AS '
UPDATE
users
SET
coin = coin + coins
WHERE
userid = users.id
RETURNING
users.id' LANGUAGE "sql" COST 100 ROWS 1000
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
Run Code Online (Sandbox Code Playgroud)

当我从 CTE 调用此函数时,它执行 SQL 命令但不触发该函数,例如:

WITH test AS
(SELECT * FROM __post_users_id_coin(10, 1))

SELECT
1 -- Select 1 but update not performed
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我从 CTE 调用该函数,然后选择 CTE 的结果(或在没有 CTE 的情况下直接调用该函数),它将执行 SQL 命令并触发该函数,例如: …

postgresql cte

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

使用表别名更新请求

执行这个请求:

update table t1 set t1.column = 0 where t1.column2 = 1234
Run Code Online (Sandbox Code Playgroud)

收到此错误:

关系“表”的“t1”列不存在

这个请求在 MySQL 中运行良好。
为什么我会在 PostgreSQL 中收到此错误?

postgresql update

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

为什么 array_agg() 比非聚合 ARRAY() 构造函数慢?

我刚刚查看了一些为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)

postgresql benchmark aggregate array

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

postgres 中的可延迟唯一索引

查看用于 alter table 的 postgres 文档,似乎可以将常规约束标记为DEFERRABLE(更具体地说,INITIALLY DEFERRED,这是我感兴趣的)。

索引也可以与约束相关联,只要:

索引不能有表达式列,也不能是部分索引

这让我相信目前没有办法拥有一个具有条件的唯一索引,例如:

CREATE UNIQUE INDEX unique_booking
  ON public.booking
  USING btree
  (check_in, check_out)
  WHERE booking_status = 1;
Run Code Online (Sandbox Code Playgroud)

INITIALLY DEFERRED,意思是,唯一性“约束”只会在交易结束时进行验证(如果SET CONSTRAINTS ALL DEFERRED;使用)。

我的假设是否正确,如果正确,有什么方法可以实现预期的行为?

谢谢

postgresql index transaction unique-constraint

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