我在表中添加了一个(新的)第二个外键a。它的第一个外键是可选的,因此ON DELETE SET NULL对外键的约束。第二届外键是强制性的,因此(新)的约束NOT NULL上a1,并a2与(新)的约束ON DELETE CASCADE外键。第二个外键还包含第一个外键的列的子集。
CREATE TABLE a
(
a0 INTEGER NOT NULL PRIMARY KEY,
-- other columns
a1 INT NOT NULL,
a2 INT NOT NULL,
a3 INT,
a4 INT,
FOREIGN KEY (a1, a2) REFERENCES b ON DELETE CASCADE,
FOREIGN KEY (a1, a2, a3, a4) REFERENCES c ON DELETE SET NULL
);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,我现在可以不再DELETE FROM c,因为这将无效并NOT NULL在限制a1和a2。在此类删除的情况下,我希望发生的是a1, a2 …
很多时候,postgresql 服务在一些配置更改后无法重新启动。
是否有任何命令行工具允许在重新加载/重新启动服务之前检查pg_hba.conf和其他 pg*.conf文件的语法,或者在任何配置更改之后检查更好?
我有一张看起来像这样的桌子
id | json_column
---+------------
1 | {"text1":"a", "text2":"b", "text3":"c", ....}
2 | {"text1":"b", "text2":"c", ....}
Run Code Online (Sandbox Code Playgroud)
我希望它像这样
text1 | text2 | text3 | ....
a | b | c | ....
b | c | d | ....
Run Code Online (Sandbox Code Playgroud)
我发现得到这个结果的一个变体是使用 json_populate_record() 并创建一个新类型 x as (text1 text, text2 text, text3 text,....) 所以我可以执行
select (json_populate_record(null::x, json_column)).* from table
Run Code Online (Sandbox Code Playgroud)
有没有另一种方法可以在不创建上述类型的情况下做到这一点?所有新列都可以有类型文本,那么可能有快捷方式吗?
我的问题是我在 aaaa_bbbb_cccc_d 形式的一个 json 字段中有 50 个键,因此手动为此创建一种类型会花费很多时间
我正在使用 9.5.4
这是什么错误?我看到复制工作正常,但我不确定数据是否已损坏。
我可以安全地忽略此错误吗?
在 PostgreSQL 9.5 中,我有表格中的列
prefix_last_modified timestamp without time zone NOT NULL DEFAULT (clock_timestamp() AT TIME ZONE 'UTC')
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来设置在每次更新行时自动更新的最后修改的值,我发现这篇定义函数的好帖子:
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有任何方法可以将列名传递给 PostgreSQL 函数并将其执行到NEW行?例如
CREATE OR REPLACE FUNCTION update_modified_column(varchar column)
RETURNS TRIGGER AS $$
BEGIN
NEW.column = now();
RETURN NEW;
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud) 这是如何有效的语句(其中 id 是表的主键):
select * from table group by id ;
Run Code Online (Sandbox Code Playgroud)
这不是:
select * from table group by name ;
Run Code Online (Sandbox Code Playgroud)
错误:列“pgluster.id”必须出现在 GROUP BY 子句中或用于聚合函数中
小提琴。
问题是为什么第一个是合法查询,即为什么按主键分组是有效的?
我在 PostgreSQL 9.5 中编写了一个 PL/pgSQL 函数。它编译得很好,但是当我从 pgAdmin3 调用它时,它给了我一个错误。似乎用函数中传递的参数替换列的动态查询不起作用。
下面是我的功能:
CREATE OR REPLACE FUNCTION insertRecordsForNotification(username text, state text, district text, organizationId text, bloodGroup text, status text, approveRejectStatus text, emailSubject text, emailBody text, notificationStatus text) RETURNS boolean AS $$
DECLARE
id int;
r moyadev.user%rowtype;
_where text :=
concat_ws(' AND '
, CASE WHEN state IS NOT NULL THEN 'state = $2' END
, CASE WHEN district IS NOT NULL THEN 'district = $3' END
, CASE WHEN bloodGroup IS NOT NULL THEN …Run Code Online (Sandbox Code Playgroud) 我是 sql DBA,正在学习 postgres ..在 postgres 日志中,我经常收到“无法从客户端接收数据:连接超时”我没有除此之外的任何其他日志
不知道如何排除故障?我检查了应用程序日志和 DBs 日志以比较时间,但我没有注意到任何异常。
有人可以指导我如何追踪这个问题。
谢谢
我不明白这两列之间的区别。美国/芝加哥时区是 UTC-6,所以我希望两者都返回相同的结果:
select timezone('America/Chicago', '2017-01-01 12:00:00'::TIMESTAMP AT TIME ZONE 'UTC'),
timezone('UTC-6' , '2017-01-01 12:00:00'::TIMESTAMP AT TIME ZONE 'UTC');
Run Code Online (Sandbox Code Playgroud)
然而,结果是:
2017-01-01 06:00:00 | 2017-01-01 18:00:00
Run Code Online (Sandbox Code Playgroud)
而且,这种行为非常尴尬,
SELECT '1:00 -1'::time with time zone AT TIME ZONE '-1';
timezone
-------------
03:00:00+01
Run Code Online (Sandbox Code Playgroud)
谁能解释一下?
我在 Windows 7 上使用 PostgreSQL 9.6.2,当我从命令提示符启动 psql 时:
psql -U myusername
Run Code Online (Sandbox Code Playgroud)
它要求输入密码并登录。但是如果我这样做:
psql -U postgres
Run Code Online (Sandbox Code Playgroud)
它会以超级用户权限直接登录到主数据库,而无需输入任何类型的密码。如果我输入:
psql -U postgres -W
Run Code Online (Sandbox Code Playgroud)
然后它会询问 su 密码,顺便说一下,这是我在一键安装过程中设置的密码。
我已经检查过了pg_hba.conf,它被设置md5为所有用户,所有数据库。我什postgres=# ALTER USER postgres PASSWORD 'myPassword';至用: 更改了数据库中的密码,但无济于事。
问题是为什么当我以普通用户身份登录时它要求输入密码而当我以超级用户身份登录时却没有?这不是主要问题,因为在任何一种情况下我都可以访问我的数据库,但它似乎根本不安全。任何解决方法将不胜感激。
postgresql ×10
dynamic-sql ×1
foreign-key ×1
group-by ×1
json ×1
linux ×1
parameter ×1
pg-hba.conf ×1
plpgsql ×1
replication ×1
select ×1
timeout ×1
timestamp ×1
timezone ×1
trigger ×1
ubuntu ×1
utc-time ×1
windows ×1