Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qesp3-008Yaf-6a for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Sep 2023 07:56:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qeso2-00FWkC-Kn for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Sep 2023 07:55:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qeso2-00FWk0-6H for pgsql-hackers@lists.postgresql.org; Sat, 09 Sep 2023 07:55:02 +0000 Received: from mail-ua1-x936.google.com ([2607:f8b0:4864:20::936]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qesnq-003Zik-RR for pgsql-hackers@lists.postgresql.org; Sat, 09 Sep 2023 07:55:00 +0000 Received: by mail-ua1-x936.google.com with SMTP id a1e0cc1a2514c-7a25071d633so1211467241.0 for ; Sat, 09 Sep 2023 00:54:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694246089; x=1694850889; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=v7V5gxK9uYSuXmxm2OsMLVlhFlsWTfsZH8ElLkCYZa8=; b=CrZbMifx9kGpuJIOI/iMICkQ6XDkYMxfP8EHAzIFp9NgAfpJJCeQ4b/tXzzxwyuZjJ fiZO++VK8u3e2bMQgArnSZs3N7RiLzuurHotx5YS3p7pw+fKoE86NembmxXn0ThXBT3m pRlRXPEQxJmxYTDK5mo2CPU6PwfjycIU7INSFgR4tlNjH6wY3SFKl/Qda9G1jIfYZJre qNZ/Z2XfjozQbV6YoFmey12hLiZdgAi0eSn/zX6atG8nlXpqvjTWV+wHti05a0bGwibt KYEIcn8QXuVQ4gUEltxWzb/goGpOu0qGtpKJVDbZ2/2KGn/NWkB6QIecnIrCpYUpxR/B IQPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694246089; x=1694850889; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=v7V5gxK9uYSuXmxm2OsMLVlhFlsWTfsZH8ElLkCYZa8=; b=hmaI92lEDVjzAdYqdIG4deZIxBMxVTetttcVN+rMQyLC9KuQOibn3VEy+rQqaU69ya 84XV2+ZKKb4muA54Sej6NN0mkIKXcwBw3ax5E4eec0Cd+7MlIaUj4E8a3SxPzPbHxozQ HzZy9EmKYv1atSGN7PqlLqJzGO8/5IyaLxAr8ILQmlRcV6k/zZKElSTpqOoeVRbhSrnV BUtT55ex0bZp9JPYAAV0E/WUueuFK09aoHUMgKcdCSCb+SYhfQWjQgNiqifw1Ia5Himz AQpBM8JfNUNBczL+gwgVHgFBmvli4N5vGRlGdOuyNhG1RW4je7REv7bkcOHNI+FK2l5i ILiQ== X-Gm-Message-State: AOJu0YxB6LuM3ETQtCxbXKz/wBCgXR0tzmu53hAjju0YfcXWj8TDbA/v H6uT/rH6nIxmFD9vU4XWTB/fV4A9SdOSjehlHmKBFP2GqOR5A//R X-Google-Smtp-Source: AGHT+IGYn27UECn9Fdz2MlPF3u+w/bA5YcSyx+pkEzm14IYxkoLRzxK/pJ37MI882jQdwirJwihZdVtKkcyuK0jA4Po= X-Received: by 2002:a05:6102:11e8:b0:44e:d947:20f5 with SMTP id e8-20020a05610211e800b0044ed94720f5mr4224567vsg.34.1694246089466; Sat, 09 Sep 2023 00:54:49 -0700 (PDT) MIME-Version: 1.0 References: <5650d77a-1d73-fd8d-4410-8e97dbeff572@illuminatedcomputing.com> <21964319-46e5-3e47-217b-6ac4169bdf13@enterprisedb.com> <27361388-f5ab-ea36-ea35-41d68a90e60d@illuminatedcomputing.com> <152e4c2c-36b4-bdc0-1b62-e9f9e8b68adc@enterprisedb.com> <251B44D1-D3E0-47E4-AB9D-4A848EDB495E@yesql.se> <1c674adf-4114-e8d8-cec7-ac10e2f424c7@enterprisedb.com> <831f17ba-ff36-1380-a475-a7cd2c65a89c@enterprisedb.com> <6f010a6e-8e20-658b-dc05-dc9033a694da@eisentraut.org> <7d44dade-ff31-5eef-80ac-78ed838066f6@postgresfriends.org> <88dadcc1-6652-ff7d-264d-73906a53dee9@illuminatedcomputing.com> In-Reply-To: From: jian he Date: Sat, 9 Sep 2023 15:54:37 +0800 Message-ID: Subject: Re: SQL:2011 application time To: Paul A Jungwirth Cc: PostgreSQL Hackers Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk hi I am confused by (pk,fk) on delete on update (restriction and no action) result based on v13. related post: https://stackoverflow.com/questions/14921668/difference-between-restrict-and-no-action Please check the following test and comments. ---common setup for test0, test1,test2,test3 BEGIN; DROP TABLE IF EXISTS temporal_rng, temporal_fk_rng2rng; CREATE TABLE temporal_rng ( id int4range,valid_at tsrange); ALTER TABLE temporal_rng ADD CONSTRAINT temporal_rng_pk PRIMARY KEY (id, valid_at WITHOUT OVERLAPS); CREATE TABLE temporal_fk_rng2rng ( id int4range, valid_at tsrange, parent_id int4range ); commit; ----------------no_action_vs_restriction test0 BEGIN; ALTER TABLE temporal_fk_rng2rng DROP CONSTRAINT IF EXISTS temporal_fk_rng2rng_fk; ALTER TABLE temporal_fk_rng2rng ADD CONSTRAINT temporal_fk_rng2rng_fk FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng ON DELETE NO ACTION ON UPDATE NO ACTION; INSERT INTO temporal_rng VALUES ('[5,5]', tsrange('2018-01-01', '2018-02-01')), ('[5,5]', tsrange('2018-02-01', '2018-03-01')); INSERT INTO temporal_fk_rng2rng VALUES ('[3,3]', tsrange('2018-01-05', '2018-01-10'), '[5,5]'); /* expect below to fail. since to be deleted range is being referenced (in temporal_fk_rng2rng) but the v13 patch won't fail. */ delete from temporal_rng FOR PORTION OF valid_at FROM '2018-01-06' TO '2018-01-11' WHERE id = '[5,5]' AND valid_at @> '2018-01-05'::timestamp; TABLE temporal_rng \; table temporal_fk_rng2rng; ROLLBACK; ----------------no_action_vs_restriction test1 BEGIN; ALTER TABLE temporal_fk_rng2rng DROP CONSTRAINT IF EXISTS temporal_fk_rng2rng_fk; ALTER TABLE temporal_fk_rng2rng ADD CONSTRAINT temporal_fk_rng2rng_fk FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng ON DELETE RESTRICT ON UPDATE RESTRICT; INSERT INTO temporal_rng VALUES ('[5,5]', tsrange('2018-01-01', '2018-02-01')), ('[5,5]', tsrange('2018-02-01', '2018-03-01')); INSERT INTO temporal_fk_rng2rng VALUES ('[3,3]', tsrange('2018-01-05', '2018-01-10'), '[5,5]'); /* expect the below command not to fail. since to be deleted range is not being referenced in temporal_fk_rng2rng) but the v13 patch will fail. */ delete from temporal_rng FOR PORTION OF valid_at FROM '2018-01-12' TO '2018-01-20' WHERE id = '[5,5]' AND valid_at @> '2018-01-05'::timestamp; ROLLBACK; ----------------no_action_vs_restriction test2 BEGIN; ALTER TABLE temporal_fk_rng2rng DROP CONSTRAINT IF EXISTS temporal_fk_rng2rng_fk; ALTER TABLE temporal_fk_rng2rng ADD CONSTRAINT temporal_fk_rng2rng_fk FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng ON DELETE no action ON UPDATE no action; INSERT INTO temporal_rng VALUES ('[5,5]', tsrange('2018-01-01', '2018-02-01')), ('[5,5]', tsrange('2018-02-01', '2018-03-01')); INSERT INTO temporal_fk_rng2rng VALUES ('[3,3]', tsrange('2018-01-05', '2018-01-10'), '[5,5]'); /* expect below command fail. since to be deleted range is being referenced (in temporal_fk_rng2rng) */ UPDATE temporal_rng FOR PORTION OF valid_at FROM '2018-01-06' TO '2018-01-08' SET id = '[7,7]' WHERE id = '[5,5]' AND valid_at @> '2018-01-05'::timestamp; TABLE temporal_rng \; table temporal_fk_rng2rng; ROLLBACK; ----------------no_action_vs_restriction test3 BEGIN; ALTER TABLE temporal_fk_rng2rng DROP CONSTRAINT IF EXISTS temporal_fk_rng2rng_fk; ALTER TABLE temporal_fk_rng2rng ADD CONSTRAINT temporal_fk_rng2rng_fk FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng ON DELETE RESTRICT ON UPDATE RESTRICT; INSERT INTO temporal_rng VALUES ('[5,5]', tsrange('2018-01-01', '2018-02-01')), ('[5,5]', tsrange('2018-02-01', '2018-03-01')); INSERT INTO temporal_fk_rng2rng VALUES ('[3,3]', tsrange('2018-01-05', '2018-01-10'), '[5,5]'); /* expect the below command not to fail. since to be deleted range is not being referenced in temporal_fk_rng2rng) but the v13 patch will fail. */ UPDATE temporal_rng FOR PORTION OF valid_at FROM '2018-01-12' TO '2018-01-20' SET id = '[7,7]' WHERE id = '[5,5]' AND valid_at @> '2018-01-05'::timestamp; ROLLBACK;