标签: postgresql

如何在 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万
查看次数

使用 CASE 在 UPDATE 查询中选择列?

我可以CASE用来选择在SELECT查询 (Postgres) 中显示哪些列,如下所示:

SELECT CASE WHEN val = 0 THEN column_x
            WHEN val = 1 THEN column_y
            ELSE 0
       END AS update, ...
Run Code Online (Sandbox Code Playgroud)

UPDATE在 Postgres 中执行查询时是否有可能发生类似的事情(即选择应该更新哪些列)?我假设不是,因为我找不到任何关于此的信息,但也许有人有一个聪明的选择(除了使用过程或使用 a 更新每一列CASE来确定是否应为该列的值分配一个新值或简单地重新分配现有的价值)。如果没有简单的选择,我当然也会接受它作为答案。

额外信息:在我的情况下,我有 14 个可能的列可以更新,每个匹配行只更新一个(要更新的表与查询中的另一个表连接)。要更新的行数很可能会有所不同,可能是数十或数百。我相信加入条件的索引已经到位。

postgresql update

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

在 postgres 中使用 COPY FROM STDIN

我刚开始使用 Postgres,我正在尝试创建一个示例数据库来了解它的功能,环顾四周,我在 pgfoundry.org 中找到了一些脚本。我理解这些命令,因为我之前同时使用了 Oracle 和 MS-SQL,但是我运行的所有脚本在到达“COPY FROM”指令时都返回错误。更准确地说,错误是在应该插入给定表中的第一个元素处抛出。

我已经尝试将脚本作为查询和 pgScripts 运行,但是在这两种方式中,我在 COPY FROM 之后的第一行都收到错误。

我正在使用 pgAdminIII,我使用 StackBuilder 将 PostgreSQL 9.2.4.1 安装为 DB 驱动程序。我是否可能缺少一些阻止我运行此命令的基本配置,或者我只是不明白他们的工作方式?

编辑:
错误是:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`
Run Code Online (Sandbox Code Playgroud)

文字在哪里:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Run Code Online (Sandbox Code Playgroud)

postgresql pgadmin bulkcopy

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

pg_upgrade 无法识别的配置参数“unix_socket_directory”

我正在尝试使用此命令作为 postgres 用户在 Fedora 18 中将 Postgresql 从 9.2 升级到 9.3

$ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres
Run Code Online (Sandbox Code Playgroud)

日志中的错误

命令:"/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "/var/lib/pgsql/data" -o "-p 50432 -b -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directory='/var/lib/pgsql'" start >> "pg_upgrade_server.log" 2>&1 等待服务器启动......致命:无法识别的配置参数“unix_socket_directory”......停止等待 pg_ctl:无法启动服务器

正如a_horse在评论中指出的那样,参数unix_socket_directories在 9.3 中被(plural)替换。但是正在启动的服务器版本是旧的9.2:

$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

postgresql upgrade

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

修复表结构以避免“错误:重复键值违反唯一约束”

我有一个以这种方式创建的表:

--
-- Table: #__content
--
CREATE TABLE "jos_content" (
  "id" serial NOT NULL,
  "asset_id" bigint DEFAULT 0 NOT NULL,
   ...
  "xreference" varchar(50) DEFAULT '' NOT NULL,
  PRIMARY KEY ("id")
);
Run Code Online (Sandbox Code Playgroud)

稍后插入一些行并指定 id:

INSERT INTO "jos_content" VALUES (1,36,'About',...)

稍后,一些记录被插入而没有 id 并且它们因错误而失败: Error: duplicate key value violates unique constraint

显然,id 被定义为一个序列:

在此处输入图片说明

每个失败的插入都会增加序列中的指针,直到它增加到一个不再存在的值并且查询成功。

SELECT nextval('jos_content_id_seq'::regclass)

表定义有什么问题?解决这个问题的聪明方法是什么?

postgresql database-design insert auto-increment sequence

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

对 PostgreSQL 的 GEQO(遗传查询优化)的修改

我需要实现一个符合 PostgreSQL 的 GEQO 功能的功能。我知道 GEQO 方法是将查询计划编码为整数字符串,而 GEQO 会随机生成这些可能的连接序列。来源:http : //www.postgresql.org/docs/9.3/static/geqo-pg-intro.html

我的问题:如果我明确知道正确的连接序列,如何修改 GEQO 函数,这样我就不必搜索不同的连接序列。例如,如果我知道加入 4 个关系的最佳方式是 4-1-3-2,我就不必检查其他排列。

关于如何在 PostgreSQL 中实现 GEQO 没有任何好的材料。PostgreSQL 只给出了 GEQO 功能的整体视图,但并没有做太多解释。

或者我可以在不使用 GEQO 的情况下在 standard_join_search() 本身中实现这个功能吗?

postgresql optimization

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

亚马逊 rds PostgreSQL 需要真空吗?

目前尚不清楚自动真空是否在 rds 中运行。谢谢!

postgresql amazon-rds

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

授予对数据库所有表的访问权限

我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USERGRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。

我想将给定数据库中所有表的权限授予指定用户,但我不确定授予他对整个架构的访问权限是否是最好的主意,public因为我不知道这是否允许某种特权升级。有没有其他办法?

postgresql best-practices permissions access-control

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

Postgres:检查物化视图占用的磁盘空间?

我知道如何检查 Postgres 中索引和表的大小(我使用的是 9.4 版):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;
Run Code Online (Sandbox Code Playgroud)

但这并没有显示物化视图。如何查看它们占用了多少磁盘空间?

postgresql database-size materialized-view disk-space

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

为什么在 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万
查看次数