小编joa*_*olo的帖子

REFERENCES 特权仅与创建外键约束有关?实际用例?

今天我了解了GRANT REFERENCES. 在多年的 SQL 管理和开发工作中,我从未听说过它,也从未遇到过问题。

引用自MySQL 5.7 参考手册/GRANT 语法

REFERENCES 启用外键创建。级别:全局、数据库、表、列。

引用自PostgreSQL 9.6 / GRANT

REFERENCES 要创建外键约束,必须对引用列和被引用列都具有此权限。可以为表的所有列或仅特定列授予特权。

GRANT REFERENCES唯一的有关创建一个外键约束?在什么业务案例中禁止创建外键约束(但允许创建表)有意义?你能给我举个真实世界的例子吗?

mysql postgresql foreign-key permissions referential-integrity

5
推荐指数
2
解决办法
6737
查看次数

如果在事务中间插入数据会发生什么?

我是数据库的新手,我对交易迷路了。例如,在我有一个sensor_log不断接收 INSERT的表的情况下,我想在一个事务中将数据移动到另外两个表。

BEGIN;

INSERT INTO sensor_log_a
SELECT id, location 
FROM sensor_log
INNER JOIN sensor_location_to_insert USING (location);

INSERT INTO sensor_log_b
SELECT id, location 
FROM sensor_log
INNER JOIN sensor_location_to_insert USING (location);

COMMIT;
Run Code Online (Sandbox Code Playgroud)

如果在事务期间插入数据或BEGIN;..COMMIT;防止这种情况发生,是否存在数据在 sensor_log_a 和 sensor_log_b 之间不同的风险?

postgresql

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

客户端应用程序在 10 分钟不活动后与其连接的数据库断开连接

当使用 pgAdmin 4(实际上是其他几个充当数据库客户端的程序)时,与服务器的连接在闲置 10 或 15 分钟后断开。一杯咖啡和一个电话,您会收到一条类似于“抱歉,与数据库的连接已丢失。您希望我尝试重新连接吗?”的消息。

而且pgAdmin重新连接总是需要多次尝试,并且已经展开的对象树被折叠了......所以,这有点烦人。

pgAdmin 似乎没有与该行为相关的任何参数。(似乎有一些方法可以更改某些连接超时,但它们与 pgAdmin 在服务器连接时间过长时的行为方式有关)。

可以做些什么来避免 pgAdmin 与数据库断开连接?


披露:这实际上是一个“伪问题”。它是另一个的衍生产品,最终与失去连接无关......鉴于我已经有了一个答案,我(不是很谦虚地)认为值得“问”,以防万一回答对某人有帮助。

postgresql client pgadmin network connectivity

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

Postgresql分区表timestamptz约束问题

该表reports按天分区表,例如reports_20170414reports_20170415

约束 SQL 定义如下

CHECK (
    rpt_datetime >= '2017-04-14 00:00:00+00'::timestamp with time zone 
    AND 
    rpt_datetime < '2017-04-15 00:00:00+00'::timestamp with time zone
)
Run Code Online (Sandbox Code Playgroud)

让我们考虑两种类型的查询

SELECT SUM(rpt_unique_clicks) 
    FROM reports WHERE rpt_datetime >= '2017-04-14 00:00:00';
Run Code Online (Sandbox Code Playgroud)

以上查询在亚秒内运行,一切正常。

SELECT SUM(rpt_unique_clicks) 
    FROM reports WHERE rpt_datetime >= 
 date_trunc('day', current_timestamp);
Run Code Online (Sandbox Code Playgroud)

相反,上面的查询运行至少 15 秒。

SELECT date_trunc('day', CURRENT_TIMESTAMP), '2017-04-14 00:00:00';
Run Code Online (Sandbox Code Playgroud)

返回

2017-04-14 00:00:00 +00:00 | 2017-04-14 00:00:00
Run Code Online (Sandbox Code Playgroud)

当我检查为什么后者运行时间长(使用解释分析)时,我完成了它访问并扫描每个表(~500)的结果,但前者仅访问,reports_20170414因此约束检查存在问题。

我想查询今天,而不是像后一个查询那样使用准备好的语句。为什么date_trunc('day', CURRENT_TIMESTAMP)不等于 2017-04-14 00:00:00

postgresql constraint partitioning timestamp check-constraints

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

SQL 代理作业日志 - 无法获取错误日志

我想将一些日志提取到报告中,以便获取夜间运行的 SQL_Agent_Jobs 状态。如果作业失败,那么我想在表中接收错误日志。我试图通过以下查询获取该信息:

DECLARE @job_id UNIQUEIDENTIFIER

SELECT 
    @job_id = job_id FROM msdb.dbo.sysjobs 
WHERE 
       [name] like '%JOB_1%'
    OR [name] like '%JOB_2%'
    OR [name] like '%JOB_3%'
    OR [name] like '%JOB_4%'
    OR [name] like '%JOB_5%'

;WITH Error_Output (job_id, error_log) AS
(
    SELECT 
        JS.job_id,
        CASE
        WHEN JSL.[log] IS NULL THEN JH.[Message]
        ELSE JSL.[log]
        END AS LogOutput
    FROM 
        msdb.dbo.sysjobsteps JS 
        INNER JOIN msdb.dbo.sysjobhistory JH 
            ON JS.job_id = JH.job_id AND JS.step_id = JH.step_id 
        LEFT OUTER JOIN msdb.dbo.sysjobstepslogs JSL
            ON JS.step_uid = JSL.step_uid
    WHERE 
        INSTANCE_ID >
        (SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent log

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

在两个不同的表中链接两个相同的主键有什么问题吗?

在此处输入图片说明

正如你在这里看到的,在OrderInfo和 中OrderNumber,我有一个关系集。但我不确定是什么样的。我希望建立一个关系,所以如果我删除了OrderNumber,它会级联删除相应的记录OrderInfo,但它不会让我。它给了我这个讨厌的'

不能在标识列上级联删除

错误,所以在删除级联删除后,它让我适当地保存它。我不确定关键的关键是什么,但我知道无限的关键是一对多?

database-design sql-server constraint cascade

4
推荐指数
2
解决办法
1625
查看次数

权限更改sql server的审计登录触发器

在我的办公室,有人更改了用户对生产数据库的权限。所以在那之后我决定写一个 ddl 类型的触发器来审计权限更改。我已经用谷歌搜索了这个,但我找不到合适的解决方案。那么你们可以给我推荐几个链接或任何示例代码吗?

我想捕获谁更改了权限以及何时更改了权限。

提前致谢。

sql-server t-sql sql-server-2012

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

如果列名有空格,如何更改mysql中的列名?

ALTER TABLE studentrecord CHANGE COLUMN  Full name fullname VARCHAR(255) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

我只想将“全名”更改为“全名”

mysql

3
推荐指数
1
解决办法
3907
查看次数

从 Postgres jsonb 属性获取不同记录的计数和总和

我有这个 Postgres 9.6 表定义:

CREATE TABLE research (
   id int,
   data jsonb
);
Run Code Online (Sandbox Code Playgroud)

并在其中包含以下示例数据

 id |data
 ---|--------------------------------------------------------
 1  |{"name": "Sim Ltd", "sector": "business", "personnel": {"headcount": {"total": 100, "male": 50, "female": 50}}}
 2  |{"name": "EcoSmart", "sector": "business", "personnel": {"headcount": {"total": 500, "male": 460, "female": 40}}} 
 3  |{"name": "HIDN", "sector": "government", "personnel": {"headcount": {"total": 431, "male": 121, "female": 310}}} 
 4  |{"name": "RevDev", "sector": "government", "personnel": {"headcount": {"total": 15, "male": 10, "female": 5}}} 
 5  |{"name": "NEFPAN", "sector": "non-profit", "personnel": {"headcount": {"total": 5, "male": …
Run Code Online (Sandbox Code Playgroud)

postgresql json

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

为表中的每个条目生成 `insert` 语句

insert从表中的每个条目生成语句的最简单方法是什么?对于 3 行的表,我需要生成 3 个插入语句。

对于具有n行的表,我需要写入文件n insert语句。

例如,对于 row (foo, bar, baz) 我需要将语句写入该文件:

insert into desired_table values (foo, bar, baz)
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 plsql

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

根据连续出现的情况对数据进行计数和分组

我很难定义问题,也许你通过我的虚拟数据理解它

我有这个数据:

PK, TaskPK
1, 1    
2, 1     
3, 2    
4, 2    
5, 5    
6, 1 
7, 1     
8, 2 
9, 2   
10, 5    
11, 5
Run Code Online (Sandbox Code Playgroud)

现在我必须数TaskPK一下,我提出这个查询

Select PK, TaskPK, Count(*)
From tbl
Group by TaskPK
Run Code Online (Sandbox Code Playgroud)

带来了这样的结果

TaskPK, Count(*)
1, 4
2, 4
5, 3
Run Code Online (Sandbox Code Playgroud)

但我想要稍微不同的结果

像这样

TaskPK, Count(*)
1, 2
2, 2
5, 1
1, 2
2, 2
5, 2
Run Code Online (Sandbox Code Playgroud)

上面的结果基于连续的数据出现,因为TaskPK从1开始(它分组在一起),然后它改变它2(它分组在一起),然后5(它分组在一起)taskPK。但是当TaskPK再次变为1时,那么它应该单独分组,不与之前出现的1联系起来,这个任务单独计数

这可能吗?

mysql gaps-and-islands

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

快速转换为大 INT

我有大量的大型数据库(300+!),它们的大小从很小到绝对庞大(120 GB+)不等。我已经确定了一种生成脚本的方法,以决定需要删除哪些索引、外键、主键和默认约束,以便将一组已知的列转换intbigint数据类型。

我们遇到的问题是在更大的数据库上,我们在这个查询上运行了 2-3 天,这在生产中是不可接受的。是否有一种方法可以比当前的 drop-change-rebuild 过程更快地进行这些转换?

sql-server type-conversion sql-server-2014

0
推荐指数
1
解决办法
102
查看次数