如果我明确要求,该语句为什么不复制约束?
CREATE TABLE backup_schema.permissions (LIKE public.permissions INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS);
INSERT INTO backup_schema.permissions
SELECT *
FROM public.permissions
WHERE community_id=123;
Run Code Online (Sandbox Code Playgroud)
使用 pgadmin3 验证我发现新表(例如:backup_schema)的约束是:

但在公共模式的原始表中是这样的:

我在 PostgreSQL 中有一个多租户应用程序,每个表中都有一个重复的tenant_id 列,以帮助将租户彼此隔离。
我的问题是,有什么方法可以使用数据库约束来确保tenant_ids与其父级一致。
例如,想象一个blog_posts有很多comments. 我想确保对于任何评论,tenant_id 与给定 blog_post_id 的tenant_id 相同。
这可以通过简单且可维护的方式完成吗?
语境
我的任务是尝试检测 Amazon Redshift (PostgreSQL) 系统中时间序列数据中的异常值。也称为办公室周围的公共假期探测器。我一直使用的方法采用前 N 个数据点的窗口平均值,我还有一个窗口标准偏差,然后获取有关前 N 个点的统计数据并将以下内容应用于当前数据点:
(x0 - avg(x1:xN)) / stddev(x1:xN) > threshold
Run Code Online (Sandbox Code Playgroud)
因此,窗口长度和阈值已经足够使用,但这种方法不是一个稳健的方法,因为在广告活动之后我们有了显着的增长,然后该系列大大偏离了运行平均值和标准差阈值,一切都是异常值。
减少窗口长度可以使其更快地适应这些变化,但它没有那么好的长期模型。
增加这种增长的阈值意味着我们之前检测到的异常值将不再被检测到。
这些相关问题在 R 中提供了建议,但答案经常提到中值绝对偏差作为一种稳健的方法:
https://en.wikipedia.org/wiki/Median_absolute_deviation
太长了;博士
如何在 Amazon Redshift 中对时间序列数据集实施中值绝对偏差?
我不确定我是否遗漏了该方法的一些基本知识,但我希望它仅适用于窗口,而不适用于整个数据集。尽管中值窗口函数不允许使用框架子句。
如果不是这种方法,那么请为我指出 Amazon Redshift 中更复杂的异常值检测查询的正确方向,我将不胜感激。
我有三台服务器,其中两台运行 postgres 9.5.3,第三台运行 pgbouncer 1.7.2。
我可以通过 pgbouncer 访问两个 postgresql 实例之一,一切都很完美。其他 postgresql 服务器,我们称之为 P1 不在我的控制之下,我必须使用 ssl 连接,因此它得到了,因此以下行被添加到该服务器 pga_hba.conf
hostssl all all ###.###.###.###/32 md5
Run Code Online (Sandbox Code Playgroud)
我可以使用 psql 从 pgbouncer 服务器连接到 P1,没有任何问题。但是当我通过 pgbouncer 连接到 P1 时,我收到此错误消息
psql: ERROR: no pg_hba.conf entry for host "XXX.XXX.XXX.XXX", user "myuser", database "mydb", SSL off
Run Code Online (Sandbox Code Playgroud)
这是我的 pgbouncer.ini
[databases]
my_database = host=xxx.xxx.xxx.xxxx port=5432 dbname=mydb user=myuser password=mypassword client_encoding='UTF8'
[pgbouncer]
listen_addr = *
listen_port = 5432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid
admin_users = rms_admin
pool_mode …Run Code Online (Sandbox Code Playgroud) 我经常需要在应用程序中克隆行,所以我会花很长的时间来完成它:
INSERT INTO mytable (a, b, c)
SELECT a,b,c FROM mytable WHERE id=12;
Run Code Online (Sandbox Code Playgroud)
(id 被声明为 a SERIAL PRIMARY KEY, 12 是要克隆的行)。
问题是,当我添加新字段时,mytable我必须记住更新克隆函数以也克隆这些新字段。
我想以更易于维护的方式克隆行。就像是 :
INSERT INTO mytable
SELECT *, id:DEFAULT FROM mytable WHERE id=12;
Run Code Online (Sandbox Code Playgroud)
在我编写本文时,我还认为克隆详细信息行会很好:如果我有一个使用引用完整性声明的详细信息/子表,如下所示:
CREATE TABLE mychild (
id serial PRIMARY KEY,
parentid int REFERENCES mytable(id),
a text
);
Run Code Online (Sandbox Code Playgroud)
我可以用一个命令克隆 mytable 和所有子表,而不是:
idmychild,设置parentid为新的idPostgreSQL(或扩展)中是否有任何内容可以帮助处理这些情况?
由于 PostgreSQL 没有 1 字节的tinyint,所以第二好的选择是smallint。然而,我从各种帖子中读到,它实际上可能会更慢,因为 CPU 已针对 32 位整数进行了优化,或者可能存在到 32 位整数的隐式转换。
除了这些原因之外,是否还有其他我不知道的不使用小于 32 位整数的原因?
我正在运行 postgres 9.4 DB 的 pg_dump,如果其他进程在表上具有独占锁,它偶尔会遇到错误。有没有办法让 pg_dump 忽略该表并继续处理数据库的其余部分,而不是仅仅停下来?
当我创建表时,创建了一个没有时区的时间戳列。所有导入的时间都在UTC. 现在我想明确添加时区信息,并且我已经更改了该列
ALTER TABLE review ALTER COLUMN review_time TYPE TIMESTAMP WITH TIME ZONE USING review_time AT TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)
选择现有数据不显示添加的时区信息
review_time
2017-07-28 02:25:44
2017-07-28 03:10:35
2017-07-28 03:11:32
2017-07-28 03:11:35
2017-07-28 03:11:38
2017-07-28 03:11:41
2017-07-28 18:54:54
Run Code Online (Sandbox Code Playgroud)
我是否需要UPDATE对现有数据运行语句?如果需要,语法是什么?
缺少时区信息的输出是由于应用程序本身 (SQLWorkbenchJ) 造成的。查询 frompsql将显示时区
mydb # SELECT review_time FROM review;
review_time
------------------------
2017-08-20 08:00:02+08
2017-07-27 00:45:33+08
2017-07-27 00:45:37+08
2017-07-28 02:24:03+08
2017-07-28 02:24:27+08
2017-07-28 02:24:31+08
2017-07-28 02:25:31+08
Run Code Online (Sandbox Code Playgroud) 我正在我的 Ubuntu 17.04 机器上运行本地 postgresql 服务器(9.5 和 9.6)。按照本指南将我的数据目录移动到另一个硬盘驱动器后,服务器无法启动。
\n即与
\nsudo service postgresql restart && sudo service postgresql status \n\n\xe2\x97\x8f postgresql.service - PostgreSQL RDBMS\n Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)\n Active: active (exited) since Mon 2017-11-06 10:31:32 CET; 1min 42s ago\n Process: 8962 ExecStart=/bin/true (code=exited, status=0/SUCCESS)\n Main PID: 8962 (code=exited, status=0/SUCCESS)\n\nNov 06 10:31:32 HERCULES systemd[1]: Starting PostgreSQL RDBMS...\nNov 06 10:31:32 HERCULES systemd[1]: Started PostgreSQL RDBMS.\nRun Code Online (Sandbox Code Playgroud)\n两个版本的日志都包含以下内容:
\npg_ctl: could not access directory "/media/daveknave/BIGFS/PGSQL/9.5/main": Keine Berechtigung\n …Run Code Online (Sandbox Code Playgroud) 我对倾销post-data部分有一个奇怪的问题。
转储命令是:
pg_dump -Fc --verbose --section=post-data --no-owner --no-acl -h localhost -p 9999 -U root db_name -W > constraints.dump
Run Code Online (Sandbox Code Playgroud)
这是一条错误消息:
pg_dump: [archiver (db)] query failed: ERROR: permission denied for relation verification_code_user_mapping_id_seq
pg_dump: [archiver (db)] query was: SELECT sequence_name, start_value, increment_by, CASE WHEN increment_by > 0 AND max_value = 9223372036854775807 THEN NULL WHEN increment_by < 0 AND max_value = -1 THEN NULL ELSE max_value END AS max_value, CASE WHEN increment_by > 0 AND min_value = 1 THEN NULL WHEN increment_by …Run Code Online (Sandbox Code Playgroud) postgresql ×10
constraint ×2
amazon-rds ×1
datetime ×1
insert ×1
integer ×1
multi-tenant ×1
permissions ×1
pg-dump ×1
pgbouncer ×1
redshift ×1
ssl ×1
table ×1
timestamp ×1