Postgres 有支持老化旧记录的功能吗?
就像标题所说,我想删除所有超过 2 年的记录,并让它每隔几分钟或几小时检查一次。我见过很多年前的帖子都说“不”,但也许情况已经改变了。
我想根据AdvertId里面的来删除,而不是根据ID来删除。我找到了AdvertId,但我卡在删除上。我正在使用 CQRS 结构。我的文件夹Repository和IRepository文件夹是分开的。在控制器部分,我通过查找advertId.
public class Advert_CategoryPropertyDetailJunctionDeleteHandler :
IRequestHandler<Advert_CategoryPropertyDetailJunctionDelete, ApiResponse>
{
private readonly IUnitOfWork _repo;
public Advert_CategoryPropertyDetailJunctionDeleteHandler(IUnitOfWork repo)
{
_repo = repo;
}
public async Task<ApiResponse> Handle(Advert_CategoryPropertyDetailJunctionDelete
request, CancellationToken cancellationToken)
{
var mapped = await
_repo.AdvertCategoryPropertyDetailJunctions.GetAllAsync(request.predicate);
if (mapped == null)
return new ErrorApiResponse(ResultMessage.NotDeletedUser);
await _repo.AdvertCategoryPropertyDetailJunctions.DeleteAllAsync((Advert_CategoryPropertyDetailJunction) mapped);
return new SuccessApiResponse();
}
}
Run Code Online (Sandbox Code Playgroud)
红外存储库:
Task<IEnumerable> DeleteAllAsync(T entity);
Run Code Online (Sandbox Code Playgroud)
存储库;
public async Task<IEnumerable> DeleteAllAsync(T entity)
{
Context.Set<T>().Remove(entity);
Context.Entry(entity).State = EntityState.Deleted;
await Context.SaveChangesAsync();
return (IEnumerable)entity;
}
Run Code Online (Sandbox Code Playgroud) 我已经尝试过以下各种其他声明,但认为其中之一显然应该有效,但到目前为止还没有运气。请告诉我我做错了什么。没有收到错误,它只是不起作用。
DELETE FROM table_name WHERE from < NOW()DELETE FROM table_name WHERE from < '2022-04-16 08:00:00'
例子 我有一个包含 600M 行的表,我想删除其中 id 来自另一个表的行的子集。
删除行或重新创建表会更有效吗?
(基于 dbt Slack 上的讨论)
当我尝试执行下面的代码时,我收到以下错误.我已经添加了我传递的SQL字符串.我错过了什么?
错误:
查询表达式'TOURID = 25e5eed3-ea84-4c30-a660-2c880253da60'中的语法错误(缺少运算符)
我的查询,
DELETE * FROM TOURS WHERE TOURID = 25e5eed3-ea84-4c30-a660-2c880253da60;
Run Code Online (Sandbox Code Playgroud)
我的代码,
Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\_Development\Data\filename.accdb;Persist Security Info=False;"
Dim DBConnection As New System.Data.OleDb.OleDbConnection(connectionString)
Try
DBConnection .Open()
Dim cmd As New System.Data.OleDb.OleDbCommand(sql, DBConnection )
Dim sqlAdapterTOURS As New System.Data.OleDb.OleDbDataAdapter(cmd)
cmd.CommandType = CommandType.Text
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
DBConnection .Close()
End Try
Run Code Online (Sandbox Code Playgroud) 有人可以解释这是做什么的吗?我指的是@comps删除后的直接 - 文档似乎建议将删除的行放入@comps,这是真的吗? @comps是一个表变量.
delete @comps
from @comps as a
where a.compcode = '43423'
Run Code Online (Sandbox Code Playgroud) 哪个更好,一个带有where子句的delete语句包含10,000或过滤器(例如从表中删除id = 1或id = 2或id = 3等)或执行10,000个删除语句(例如从表中删除id = 1 ;从表中删除id = 2;等)?该数据库是MS SQL Server.
编辑
ID不是顺序的,并且没有where子句可以用来捕获它们(例如id> 100且id <50)因为我不知道这些ID是如何相关的(除了它们全部来自同一张表).所以这真的是一个性能问题.
SqlConnection con1 = new SqlConnection(strcon);
con1.Open();
string query = " ";
query += " BEGIN TRANSACTION ";
query += " DELETE FROM VehicleRentals FROM VehicleRentals INNER JOIN Vehicles N VehicleRentals.VehicleID = Vehicles.VehicleID WHERE LicensePlate=@LicensePlate ";
query += " DECLARE @x int ";
query += " SELECT @x = VehicleTypeCode FROM Vehicles WHERE LicensePlate=@LicensePlate ";
query += " DELETE FROM Manufacturers FROM Manufacturers INNER JOIN Models ON Manufacturers.ManufacturerCode = Models.ManufacturerCode INNER JOIN Vehicles ON Models.ModelID = Vehicles.ModelID WHERE LicensePlate=@LicensePlate ";
query …Run Code Online (Sandbox Code Playgroud) 我有这张桌子:
StudentId | ConfigurationTypeId
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
Run Code Online (Sandbox Code Playgroud)
我想删除此表中的所有记录 ConfigurationTypeId = 3
所以我提出了这个问题:
DELETE FROM [StudentConfigurationType] WHERE StudentId IN
(SELECT StudentId FROM [StudentConfigurationType] SCT
INNER JOIN [Student] S ON S.Id = SCT.StudentId
WHERE SCT.ConfigurationTypeId = 3 AND S.RegisteredDate < '2014-09-18')
Run Code Online (Sandbox Code Playgroud)
但是,因为这个表没有Id,所以StudentId会进来,它会从表中删除所有记录.怎么能做这样的事情:
DELETE FROM [StudentConfigurationType] WHERE StudentId AND ConfigurationTypeId IN
(SELECT StudentId, ConfigurationTypeId FROM [StudentConfigurationType] SCT
INNER JOIN [Student] S ON S.Id = SCT.StudentId
WHERE SCT.ConfigurationTypeId = 3 AND S.RegisteredDate …Run Code Online (Sandbox Code Playgroud) 我有一个sqlite表,其中包含我想要删除的重复标题.这是我目前的发言.
DELETE FROM table WHERE FIELD = "FIELD"
Run Code Online (Sandbox Code Playgroud)
执行此语句时,将删除整个表.
sql-delete ×10
sql ×6
c# ×2
database ×2
delete-row ×2
sql-server ×2
t-sql ×2
ms-access ×1
mysql ×1
optimization ×1
postgresql ×1
python ×1
snowflake-cloud-data-platform ×1
sqlite ×1