小编And*_*y M的帖子

Postgres 更新限制

我很好奇 Postgres 是否有任何可以限制为 ID 保留的行数的地方。

例如,假设我有一个 users 表和 login_coordinates 表。每次用户登录时,最新的坐标都会输入到用户表中的一列,并插入到 login_coordinates 表中。

我只想保留最后 10 条记录,并删除所有用户的 login_coordinates 表中的第 11 条(最旧)记录。

用户

   user_id            | current_coordinates        |    
----------------------+----------------------------+
    1                 | aaaa.bbbbb, aaaaa.bbbbbb   |    
    2                 | zzzz.xxxxxx, xxxxx.xxxcxx  |    
    3                 | dddd.xxxxxx, xxxxx.xxxcxx  |  
Run Code Online (Sandbox Code Playgroud)

登录坐标

  coordinates_id      | old_login_coordinates      |        user_id           |
----------------------+----------------------------+--------------------------+
    1                 | aaaa.bbbbb, aaaaa.bbbbbb   |     1                    |
    2                 | xxxxx.xxxxxx, xxxxx.xxxcxx |     1                    |
    3                 | xxxxx.xxxxxx, xxxxx.xxxcxx |     1                    |
Run Code Online (Sandbox Code Playgroud)

是否有任何将记录限制为每个用户 10 个坐标标识的东西,总是删除最旧的记录?

我正在使用 PostgreSQL 9.5。

postgresql database-design postgresql-9.5

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

如何让mysqldump使用/*!40101 SET character_set_client = utf8mf4 */;?

当我使用 mysqldump 导出 mysql 数据库时,它总是产生一个 dump.sql 包含

...some other things...
/*!40101 SET character_set_client = utf8*/;
...some other things...
Run Code Online (Sandbox Code Playgroud)

这是我使用的 mysqldump 命令:

mysqldump -u root -p databaseName -R -E --single-transaction --default-character-set=utf8mb4 > dump.sql
Run Code Online (Sandbox Code Playgroud)

mysql数据库的字符集是utf8mb4而不是utf8,字符相关的变量是:

...some other things...
/*!40101 SET character_set_client = utf8*/;
...some other things...
Run Code Online (Sandbox Code Playgroud)

为什么mysqldump总是添加 /*!40101 SET character_set_client = utf8*/而不是 /*!40101 SET character_set_client = utf8mb4*/

如果/*!40101 SET character_set_client = utf8*/使用会发生什么?

我们可以使用mysqldump/*!40101 SET character_set_client = utf8mb4*/吗?

mysql mysqldump

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

对大表进行分区并没有提高性能,为什么?

在 SQL Server 2014 中,我每周对我的一个大表进行分区,并定义了一个滑动窗口方案,将最早一周的数据切换到存档数据库,并为下周创建一个新分区。

这是结果:

在此处输入图片说明

这是针对 AVL 系统(车辆跟踪)的。我在PositionDate ( datetime )上进行了分区。我们所有的查询在 WHERE 子句中都有PositionDate,在许多情况下,我们在 WHERE 子句中也有VehicleId。所以我在VehicleId ( int )上创建了两个对齐的索引:

  • 一对(PositionDate,VehicleId) ;
  • 一个就只是(VehicleId)

但是在其 WHERE 子句中包含VehicleId 的每个查询中,这两个非聚集索引都没有使用(根据查询计划)。

我现在有一个性能问题。

我比较了分区表和非分区表之间的查询计划,如下所示:

Select * from MyNonPart_Table Where PositionDate between '2016-05-01' AND '2016-06-01'

Select * from PartitinedTable Where PositionDate between '2016-05-01' AND '2016-06-01'
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,我看到第一个查询花费了 30%,但第二个查询花费了 70%。

我有一个文件组,其中包含两个用于分区表的文件。

我的问题:

  1. 每个分区中的行数是否大于分区的最佳行数?如果我按天分区并保留最近 60 天的数据,这会帮助我提高性能吗?

  2. 我的非聚集索引是否定义明确,或者我应该删除它们?我们在所有查询的 WHERE 子句中都有PositionDate,在其中许多查询中都有VehicleId

  3. 我是否在这种情况下滥用分区?如果我在非分区表上定义良好的索引并将最旧的数据(超过 2 个月)移动到存档表,这对我的情况是否有效?

我的索引的 DDL:

ALTER …
Run Code Online (Sandbox Code Playgroud)

index sql-server partitioning

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

累积总和的 SQL 查询

我在制定(相对)简单的 SQL 查询(使用 SQL Server 2012)时遇到问题。我们有一个数据库,可以为某些用户计算一些东西。因此,我们有一个非常简单的数据库结构,由两个表组成。

users

PK_User, uniqueidentifier
ID, bigint
Username, nvarchar(128)
CreationTimestamp, datetime
Run Code Online (Sandbox Code Playgroud)

data

PK_Data, uniqueidentifier
FK_User, uniqueidentifier
FK_Reporter, uniqueidentifier
CreationTimestamp, datetime
Run Code Online (Sandbox Code Playgroud)

我目前正在使用以下 SQL 语句:

SELECT u.Username, COUNT(d.FK_User) AS 'Count', CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime) AS 'Date'
FROM data d INNER JOIN users u ON u.PK_User = d.FK_User
GROUP BY CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime), u.Username
ORDER BY CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime)
Run Code Online (Sandbox Code Playgroud)

它提供了这样的东西:

User1   5   %Date1%
User2   3   %Date1%
User1   7   %Date2%
User2 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 sum running-totals

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

MySQL 说我创建的函数的参数计数不正确,即使它是正确的

我正在将我的 web 应用程序从本地迁移到 DigitalOcean,并且在使用我创建的例程时遇到了问题。它在本地运行良好(版本 5.5.50)但在在线 MySQL(版本 5.7.13)上它给了我以下错误:

#1582-调用本机函数“DISTANCE”时的参数计数不正确

即使电话是正确的。

我已经删除了该函数,但它仍然给我同样的错误,因此我认为它甚至无法找到我的函数。

我试图将所有权限授予我的用户,但它仍然无法正常工作。

mysql mysql-5.5 mysql-5.7

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

优化收集所有相关项目的查询

下表是我的菜单主​​表,菜单深度不受限制。每个菜单可以有一个子菜单和一个子子菜单等等。

我面临的问题是获取具有相同顶级父级的所有项目。

一种解决方案是在父级不为空时进行循环,第二种解决方案是创建一个具有父级 id 的视图以及所有带有逗号分隔列的子菜单 id。

然后一个选择命令将给出父 ID。我的表如下:

CategoryID  | ParentID    
1           | null        
2           | null        
3           | 1           
4           | 1           
5           | 2           
6           | 2           
7           | 3           
Run Code Online (Sandbox Code Playgroud)

输出应该是

CategoryID  | AllRelatedCategory
1           | 1,3,4,7
2           | 2,5,6
Run Code Online (Sandbox Code Playgroud)

我当前的代码如下。问题是它仅适用于 3 个层次结构。

;with cte as
(
select a.CategoryID col1, convert(varchar, a.CategoryID) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a where a.ParentID is null

union
select a.CategoryID col1, (convert(varchar, isnull(b.CategoryID,''))) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a 
left join [dbo].[TB_CATEGORY_MASTER] b on a.CategoryID=b.ParentID …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

使用 GROUP BY 并返回超过 2 列

我正在尝试为表中的每个找到最新的 unit_status和该状态 ( )的时间戳cdtsunid

这是我到目前为止想出的:

with cte as 
(
    select * 
    from un_hi 
    where ag_id = 'bfd' and cdts > '201708' and
    unit_status != 'uc'
)
select distinct(unid), max(cdts2) Last_GPS_Report_Date
from cte
where unid in ('C06','C07','D01','D03','D04','D06')
group by unid
order by unid
Run Code Online (Sandbox Code Playgroud)

它正确地返回每个unid时间的他们的最新状态(max(cdts)),但我想看看有什么unit_status了。

我尝试将这个查询加入到UN_HI表中(这是数据的来源),但我无法让它工作。还有其他建议吗?

sql-server-2008 sql-server greatest-n-per-group

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

是否可以在断开连接后刷新 PgAdmin 4 查询而不重新启动新查询?

有时我将 PgAdmin 会话单独放置一段时间,当我回来发出查询时,会收到错误

Server closed the connection unexpectedly. 
        This probably means the server terminated abnormally
        before or while processing the request.
******* Error **********
Run Code Online (Sandbox Code Playgroud)

所以,我知道我只需要重新连接,但似乎我必须关闭查询窗口并重新连接并打开一个新的查询窗口才能正常工作。

是否可以重新连接并使用相同的查询窗口?

有人建议我在错误出现后再次单击执行按钮,PgAdmin 将重新连接实例并执行查询。然而,这是行不通的。无论我尝试重新执行多少次,PgAdmin 都不会重新连接。

postgresql pgadmin-4

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

如何关闭“启用软件使用指标”和 ESENT 错误的日志记录

我在具有两个节点的故障转移群集(单实例群集)中运行 SQL Server 2017 Standard CU 5。我按照 2本手册停用CEIP又名间谍软件功能:

  • CEIP 服务被禁用并停止,
  • 从集群中删除的 CEIP 角色
  • 并且所有关于 CustomerFeedback 和 EnableErrorReporting 的注册表项都设置为 0。

但是我仍然收到消息“软件使用指标已启用”。在服务重新启动后的 SQL Server 错误日志中。此外,在我的 Windows 事件日志中,ESENT 经常出现如下错误:

ESENT 错误访问被拒绝

一篇针对此问题的MS 知识库文章。但是它是针对 SQL Server 2012 的。它说这个错误与“软件使用指标功能”有关。我已经按照建议为 SQL Server 服务帐户授予权限。但是,错误消息不断出现,无论如何我都不希望 Microsoft 收集数据。

以下是我的问题:

  1. 这是与 CEIP 或其他东西相同的功能吗?
  2. 如何正确停用软件使用指标?

sql-server setup sql-server-2017

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

是否可以允许表的非所有者禁用表的触发器?

我想要一个不是表所有者的用户,授予关闭和打开触发器的权限。可以做到吗?

postgresql trigger permissions

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