== PostgreSQL Weekly News - October 20, 2019 == - Mailing list pgsql-announce
From | David Fetter |
---|---|
Subject | == PostgreSQL Weekly News - October 20, 2019 == |
Date | |
Msg-id | 20191020173935.GA7744@fetter.org Whole thread Raw |
List | pgsql-announce |
== PostgreSQL Weekly News - October 20, 2019 == PostgreSQL@SCaLE is a two day, two track event which takes place on March 5-6, 2020, at Pasadena Convention Center, as part of SCaLE 18X. The CfP is open through November 30, 2019. https://www.socallinuxexpo.org/scale/18x/postgresscale The CfP for FOSDEM PGDay is open through November 18th, 2019 at 24:00 CET. https://2020.fosdempgday.org/ The CfP for FOSDEM is open through November 8, 2019. https://fosdem.org/2020/news/2019-08-13-call-for-participation/ == PostgreSQL Product News == repmgr 5.0 a replication manager for PostgreSQL, released. https://repmgr.org/docs/5.0/release-5.0.html KrahoDB, a multi-master replication base on logical replication, released. https://github.com/timbira/krahodb pgAdmin4 4.14, a web- and native GUI control center for PostgreSQL, released. https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_14.html pg_probackup 2.2.3, a utility to manage backup and recovery of PostgreSQL database clusters, released. https://github.com/postgrespro/pg_probackup pgbouncer 1.12.0, a connection pooler and more for PostgreSQL, released. https://pgbouncer.github.io/2019/10/pgbouncer-1-12-0 pg_timetable, a job scheduler for PostgreSQL, released. https://www.cybertec-postgresql.com/en/products/pg_timetable/ == PostgreSQL Jobs for October == http://archives.postgresql.org/pgsql-jobs/2019-10/ == PostgreSQL Local == 2Q PGConf 2019 will be held December 4 & 5 in Chicago. https://www.2qpgconf.com/ PGDay Down Under 2019 will be held on November 15, 2019 in Sydney, Australia. https://pgdu.org/ pgDay Paris 2020 will be held in Paris, France on March 26, 2020 at Espace Saint-Martin. http://2020.pgday.paris/ Nordic PGDay 2020 will be held in Helsinki, Finland at the Hilton Helsinki Strand Hotel on March 24, 2020. The CfP is open through December 31, 2019 at https://2020.nordicpgday.org/cfp/ PGConf India 2020 will be on February 26-28, 2020 in Bengaluru, Karnataka. The CfP is open until November 15, 2019. http://pgconf.in/ The German-speaking PostgreSQL Conference 2020 will take place on May 15, 2019 in Stuttgart. == PostgreSQL in the News == Planet PostgreSQL: http://planet.postgresql.org/ PostgreSQL Weekly News is brought to you this week by David Fetter Submit news and announcements by Sunday at 3:00pm PST8PDT to david@fetter.org. == Applied Patches == Tom Lane pushed: - Revert "Hack pg_ctl to report postmaster's exit status.". This reverts commit 6a5084eed49552bfc8859c438c8d74ad09fc5d3f. We learned what we needed to know from that. https://git.postgresql.org/pg/commitdiff/f38291e927fa8c04eb772e6a17a3dd44da2b69e8 - In the postmaster, rely on the signal infrastructure to block signals. POSIX sigaction(2) can be told to block a set of signals while a signal handler executes. Make use of that instead of manually blocking and unblocking signals in the postmaster's signal handlers. This should save a few cycles, and it also prevents recursive invocation of signal handlers when many signals arrive in close succession. We have seen buildfarm failures that seem to be due to postmaster stack overflow caused by such recursion (exacerbated by a Linux PPC64 kernel bug). This doesn't change anything about the way that it works on Windows. Somebody might consider adjusting port/win32/signal.c to let it work similarly, but I'm not in a position to do that. For the moment, just apply to HEAD. Possibly we should consider back-patching this, but it'd be good to let it age awhile first. Discussion: https://postgr.es/m/14878.1570820201@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9abb2bfc046070b22e3be28173a0736da31cab5a Peter Eisentraut pushed: - Update unicode.org URLs. Use https, consistent host name, remove references to ftp. Also update the URLs for CLDR, which has moved from Trac to GitHub. https://git.postgresql.org/pg/commitdiff/bdb839cbdebe851c200b2c7c03aec7483573d631 - Fix most -Wundef warnings. In some cases #if was used instead of #ifdef in an inconsistent style. Cleaning this up also helps when analyzing cases like 38d8dce61fff09daae0edb6bcdd42b0c7f10ebcd where this makes a difference. There are no behavior changes here, but the change in pg_bswap.h would prevent possible accidental misuse by third-party code. Discussion: https://www.postgresql.org/message-id/flat/3b615ca5-c595-3f1d-fdf7-a429e564f614%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/5d3587d14b753cb25b0ebcd549d95e1b6ceebce4 - Clean up MinGW def file generation. There were some leftovers from ancient ad-hoc ways to build on Windows, prior to the standardization on MSVC and MinGW. We don't need to build a lib$(NAME)ddll.def (debug build, as opposed to lib$(NAME)dll.def) for MinGW, since nothing uses that. We also don't need to build the regular .def file during distprep, since the MinGW build environment is perfectly capable of creating that normally at build time. Discussion: https://www.postgresql.org/message-id/flat/0f9db9f8-47b8-a48b-6ccc-15b22b412316%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/ea9e06ac66d3e9584950f52878c8e4b71f963610 Michaël Paquier pushed: - Update test output of sepgsql for ALTER TABLE COLUMN DROP. 1df5875 has changed the way dependencies are dropped for this command with inheritance trees, which impacts sepgsql. This just updates the regression test output to take care of the failures and adapt to the new code. Reported by buildfarm member rhinoceros. Author: Michael Paquier Reviewed-by: Tom Lane Discussion: https://postgr.es/m/20191013101331.GC1434@paquier.xyz Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/14ac4237cba02f2766a7e6379468e71050de6fd2 - Doc: Fix various inconsistencies. This fixes multiple areas of the documentation: - COPY for its past compatibility section. - SET ROLE mentioning INHERITS instead of INHERIT - PREPARE referring to stmt_name, that is not present. - Extension documentation about format name with upgrade scripts. Backpatch down to 9.4 for the relevant parts. Author: Alexander Lakhin Discussion: https://postgr.es/m/bf95233a-9943-b341-e2ff-a860c28af481@gmail.com Backpatch-through: 9.4 https://git.postgresql.org/pg/commitdiff/4351142e5843dc9fcb080a51aa082d63be59a5ab - Refresh some incorrect links in pg_crc.c/h. Author: Vignesh C Discussion: https://postgr.es/m/CALDaNm0LPk9vTGTBPBRv0=fX=94o4r6-DuBbHNeCN2AH5bufLw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1de4fd10922b96b6d90838181c59c1a45f8a95f6 - Fix timeout handling in logical replication worker. The timestamp tracking the last moment a message is received in a logical replication worker was initialized in each loop checking if a message was received or not, causing wal_receiver_timeout to be ignored in basically any logical replication deployments. This also broke the ping sent to the server when reaching half of wal_receiver_timeout. This simply moves the initialization of the timestamp out of the apply loop to the beginning of LogicalRepApplyLoop(). Reported-by: Jehan-Guillaume De Rorthais Author: Julien Rouhaud Discussion: https://postgr.es/m/CAOBaU_ZHESFcWva8jLjtZdCLspMj7vqaB2k++rjHLY897ZxbYw@mail.gmail.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/3f60f690fac1bf375b92cf2f8682e8fe8f690981 - Remove last traces of heap_open/close in the tree. Since pluggable storage has been introduced, those two routines have been replaced by table_open/close, with some compatibility macros still present to allow extensions to compile correctly with v12. Some code paths using the old routines still remained, so replace them. Based on the discussion done, the consensus reached is that it is better to remove those compatibility macros so as nothing new uses the old routines, so remove also the compatibility macros. Discussion: https://postgr.es/m/20191017014706.GF5605@paquier.xyz https://git.postgresql.org/pg/commitdiff/f25968c49697db673f6cd2a07b3f7626779f1827 Tomáš Vondra pushed: - Check for tables with sql_identifier during pg_upgrade. Commit 7c15cef86d changed sql_identifier data type to be based on name instead of varchar. Unfortunately, this breaks on-disk format for this data type. Luckily, that should be a very rare problem, as this data type is used only in information_schema views, so this only affects user objects (tables, materialized views and indexes). One way to end in such situation is to do CTAS with a query on those system views. There are two options to deal with this - we can either abort pg_upgrade if there are user objects with sql_identifier columns in pg_upgrade, or we could replace the sql_identifier type with varchar. Considering how rare the issue is expected to be, and the complexity of replacing the data type (e.g. in matviews), we've decided to go with the simple check. The query is somewhat complex - the sql_identifier data type may be used indirectly - through a domain, a composite type or both, possibly in multiple levels. Detecting this requires a recursive CTE. Backpatch to 12, where the sql_identifier definition changed. Reported-by: Hans Buschmann Author: Tomas Vondra Reviewed-by: Tom Lane Backpatch-to: 12 Discussion: https://postgr.es/m/16045-673e8fa6b5ace196%40postgresql.org https://git.postgresql.org/pg/commitdiff/0ccfc2822366f92c61cba96541d1c64d2b8b2086 - Correct reference to pg_catalog.regtype in pg_upgrade query. The recursive CTE added in 0ccfc28223 referenced pg_catalog.regtype, without the schema part, unlike all other queries in pg_upgrade. Backpatch-to: 12 https://git.postgresql.org/pg/commitdiff/3a0e85739490e5cd50e5eba382ae3c9cc3bc2fca - Improve the check for pg_catalog.line data type in pg_upgrade. The pg_upgrade check for pg_catalog.line data type when upgrading from 9.3 had a couple of issues with domains and composite types. Firstly, it triggered false positives for composite types unused in objects with storage. This was enough to trigger an unnecessary pg_upgrade failure: CREATE TYPE line_composite AS (l pg_catalog.line) On the other hand, this only happened with composite types directly on the pg_catalog.line data type, but not with a domain. So this was not detected CREATE DOMAIN line_domain AS pg_catalog.line; CREATE TYPE line_composite_2 AS (l line_domain); unlike the first example. These false positives and inconsistencies are unfortunate, but what's worse we've failed to detected objects using the pg_catalog.line data type through a domain. So we missed cases like this CREATE TABLE t (l line_composite_2); The consequence is clusters broken after a pg_upgrade. This fixes these false positives and false negatives by using the same recursive CTE introduced by eaf900e842 for sql_identifier. 9.3 did not support domains on composite types, but we can still have multi-level composite types. Backpatch all the way to 9.4, where the format for pg_catalog.line data type changed. Author: Tomas Vondra Backpatch-to: 9.4- Discussion: https://postgr.es/m/16045-673e8fa6b5ace196%40postgresql.org https://git.postgresql.org/pg/commitdiff/8d48e6a7240cb0542577860e1bac768cd86fc633 - Improve the check for pg_catalog.unknown data type in pg_upgrade. The pg_upgrade check for pg_catalog.unknown type when upgrading from 9.6 had a couple of issues with domains and composite types - it detected even composite types unused in objects with storage. So for example this was enough to trigger an unnecessary pg_upgrade failure: CREATE TYPE unknown_composite AS (u pg_catalog.unknown) On the other hand, this only happened with composite types directly on the pg_catalog.unknown data type, but not with a domain. So this was not detected CREATE DOMAIN unknown_domain AS pg_catalog.unknown; CREATE TYPE unknown_composite_2 AS (u unknown_domain); unlike the first example. These false positives and inconsistencies are unfortunate, but what's worse we've failed to detected objects using the pg_catalog.unknown type through a domain. So we missed cases like this CREATE TABLE t (u unknown_composite_2); The consequence is clusters broken after a pg_upgrade. This fixes these false positives and false negatives by using the same recursive CTE introduced by eaf900e842 for sql_identifier. Backpatch all the way to 10, where the of pg_catalog.unknown data type was restricted. Author: Tomas Vondra Backpatch-to: 10- Discussion: https://postgr.es/m/16045-673e8fa6b5ace196%40postgresql.org https://git.postgresql.org/pg/commitdiff/a524f50d0fc6fe6f2146ce708c2c9576d3734da4 Andres Freund pushed: - Fix CLUSTER on expression indexes. Since the introduction of different slot types, in 1a0586de3657, we create a virtual slot in tuplesort_begin_cluster(). While that looks right, it unfortunately doesn't actually work, as ExecStoreHeapTuple() is used to store tuples in the slot. Unfortunately no regression tests for CLUSTER on expression indexes existed so far. Fix the slot type, and add bare bones tests for CLUSTER on expression indexes. Reported-By: Justin Pryzby Author: Andres Freund Discussion: https://postgr.es/m/20191011210320.GS10470@telsasoft.com Backpatch: 12, like 1a0586de3657 https://git.postgresql.org/pg/commitdiff/cef82eda1464193ab84a58610a388572d456c8c5 - Replace alter_table.sql test usage of event triggers. The test in 93765bd956b added an event trigger to ensure that the tested table rewrites do not get optimized away (as happened in the past). But doing so would require running the tests in isolation, as otherwise the trigger might also fire in concurrent sessions, causing test failures there. Reported-By: Tom Lane Discussion: https://postgr.es/m/3328.1570740683@sss.pgh.pa.us Backpatch: 12, just as 93765bd956b https://git.postgresql.org/pg/commitdiff/ae5cae54ca6b1949829026b9fbb744c7f5a28bd5 Thomas Munro pushed: - Use libc version as a collation version on glibc systems. Using glibc's version string to detect potential collation definition changes is not 100% reliable, but it's better than nothing. Currently this affects only collations explicitly provided by "libc". More work will be needed to handle the default collation. Author: Thomas Munro, based on a suggestion from Christoph Berg Reviewed-by: Peter Eisentraut Discussion: https://postgr.es/m/4b76c6d4-ae5e-0dc6-7d0d-b5c796a07e34%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/d5ac14f9ccdda036358c9059d4a29836ebc0c440 - Remove obsolete collation test. The previous commit forgot to remove this test, which no longer holds on all systems. https://git.postgresql.org/pg/commitdiff/cce95a2f029e546dc461d7ec1760e2c3a247b0e7 - Fix bug that could try to freeze running multixacts. Commits 801c2dc7 and 801c2dc7 made it possible for vacuum to try to freeze a multixact that is still running. That was prevented by a check, but raised an error. Repair. Back-patch all the way. Author: Nathan Bossart, Jeremy Schneider Reported-by: Jeremy Schneider Reviewed-by: Jim Nasby, Thomas Munro Discussion: https://postgr.es/m/DAFB8AFF-2F05-4E33-AD7F-FF8B0F760C17%40amazon.com https://git.postgresql.org/pg/commitdiff/6bda2af039d45d9a136ddc04e2242163177ab5ad - When restoring GUCs in parallel workers, show an error context. Otherwise it can be hard to see where an error is coming from, when the parallel worker sets all the GUCs that it received from the leader. Bug #15726. Back-patch to 9.5, where RestoreGUCState() appeared. Reported-by: Tiago Anastacio Reviewed-by: Daniel Gustafsson, Tom Lane Discussion: https://postgr.es/m/15726-6d67e4fa14f027b3%40postgresql.org https://git.postgresql.org/pg/commitdiff/3c8c55dd5445370c5cad3ae04de02caba7be7073 Álvaro Herrera pushed: - Fix crash when reporting CREATE INDEX progress. A race condition can make us try to dereference a NULL pointer to the PGPROC struct of a process that's already finished. That results in crashes during REINDEX CONCURRENTLY and CREATE INDEX CONCURRENTLY. This was introduced in ab0dfc961b6a, so backpatch to pg12. Reported by: Justin Pryzby Reviewed-by: Michaël Paquier Discussion: https://postgr.es/m/20191012004446.GT10470@telsasoft.com https://git.postgresql.org/pg/commitdiff/0d21f919eb86cd3baa267844d111c6a5af480696 - Fix parallel restore of FKs to partitioned tables. When an FK constraint is created, it needs the index on the referenced table to exist and be valid. When doing parallel pg_restore and the referenced table was partitioned, this condition can sometimes not be met, because pg_dump didn't emit sufficient object dependencies to ensure so; this means that parallel pg_restore would fail in certain conditions. Fix by having pg_dump make the FK constraint object dependent on the partition attachment objects for the constraint's referenced index. This has been broken since f56f8f8da6af, so backpatch to Postgres 12. Discussion: https://postgr.es/m/20191005224333.GA9738@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/1752e351639dcc68ea289cf91428246ed316d9b2 - Fix minor bug in logical-replication walsender shutdown. Logical walsender should exit when it catches up with sending WAL during shutdown; but there was a rare corner case when it failed to because of a race condition that puts it back to wait for more WAL instead -- but since there wasn't any, it'd not shut down immediately. It would only continue the shutdown when wal_sender_timeout terminates the sleep, which causes annoying waits during shutdown procedure. Restructure the code so that we no longer forget to set WalSndCaughtUp in that case. This was an oversight in commit c6c333436. Backpatch all the way down to 9.4. Author: Craig Ringer, Álvaro Herrera Discussion: https://postgr.es/m/CAMsr+YEuz4XwZX_QmnX_-2530XhyAmnK=zCmicEnq1vLr0aZ-g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/38ddeab13b4b86161799c097dea4bdf9be60924a - Update comments about progress reporting by index_drop. Michaël Paquier complained that index_drop is requesting progress reporting for non-obvious reasons, so let's add a comment to explain why. Discussion: https://postgr.es/m/20191017010412.GH2602@paquier.xyz https://git.postgresql.org/pg/commitdiff/d2efb90dbad97828838ab356c03927b3dda65070 - Fix typo. Apparently while this code was being developed, ReindexRelationConcurrently operated on multiple relations. The version that was ultimately pushed doesn't, so this comment's use of plural is inaccurate. https://git.postgresql.org/pg/commitdiff/89403ed228583c80c608310e68020229818836e6 Fujii Masao pushed: - Make crash recovery ignore recovery_min_apply_delay setting. In v11 or before, this setting could not take effect in crash recovery because it's specified in recovery.conf and crash recovery always starts without recovery.conf. But commit 2dedf4d9a8 integrated recovery.conf into postgresql.conf and which unexpectedly allowed this setting to take effect even in crash recovery. This is definitely not good behavior. To fix the issue, this commit makes crash recovery always ignore recovery_min_apply_delay setting. Back-patch to v12 where the issue was added. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CAHGQGwEyD6HdZLfdWc+95g=VQFPR4zQL4n+yHxQgGEGjaSVheQ@mail.gmail.com Discussion: https://postgr.es/m/e445616d-023e-a268-8aa1-67b8b335340c@pgmasters.net https://git.postgresql.org/pg/commitdiff/9b95a36be8be6c3a78b303bbe709c622dc312e87 - Fix failure of archive recovery with recovery_min_apply_delay enabled. recovery_min_apply_delay parameter is intended for use with streaming replication deployments. However, the document clearly explains that the parameter will be honored in all cases if it's specified. So it should take effect even if in archive recovery. But, previously, archive recovery with recovery_min_apply_delay enabled always failed, and caused assertion failure if --enable-caasert is enabled. The cause of this problem is that; the ownership of recoveryWakeupLatch that recovery_min_apply_delay uses was taken only when standby mode is requested. So unowned latch could be used in archive recovery, and which caused the failure. This commit changes recovery code so that the ownership of recoveryWakeupLatch is taken even in archive recovery. Which prevents archive recovery with recovery_min_apply_delay from failing. Back-patch to v9.4 where recovery_min_apply_delay was added. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CAHGQGwEyD6HdZLfdWc+95g=VQFPR4zQL4n+yHxQgGEGjaSVheQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ec1259e880dd0738a0b111e47d1b7153d3da20fd Noah Misch pushed: - For PowerPC instruction "addi", use constraint "b". Without "b", a variant of the tas() code miscompiles on macOS 10.4. This may also fix a compilation failure involving macOS 10.1. Today's compilers have been allocating acceptable registers with or without this change, but this future-proofs the code by precisely conveying the acceptable registers. Back-patch to 9.4 (all supported versions). Reviewed by Tom Lane. Discussion: https://postgr.es/m/20191009063900.GA4066266@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/89b4d7744c80ecb3f6bdf8a07ca711a043718db3 - For all ppc compilers, implement compare_exchange and fetch_add with asm. This is more like how we handle s_lock.h and arch-x86.h. Reviewed by Tom Lane. Discussion: https://postgr.es/m/20191005173400.GA3979129@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/30ee5d17c20dbb282a9952b3048d6ad52d56c371 - Use standard compare_exchange loop style in ProcArrayGroupClearXid(). Besides style, this might improve performance in the contended case. Reviewed by Amit Kapila. Discussion: https://postgr.es/m/20191015035348.GA4166224@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/48cc59ed24f95fa171b12ba1b461e6dc72d62b2b == Pending Patches == Corey Huinker sent in a patch to add a glossary. Álvaro Herrera sent in two revisions of a patch to fix a crash in REINDEX CONCURRENTLY. Dilip Kumar sent in another revision of a patch to fix an infelicity between logical_work_mem and logical streaming of large in-progress transactions. Konstantin Knizhnik sent in three revisions of a patch to do some adaptive query optimization based on correlations between columns. Ashutosh Sharma sent in a patch to fix some issues in the zedstore patch. Vigneshwaran C sent in two revisions of a patch to fix the order of header file inclusion. David Cramer sent in a patch to add a STARTUP packet option to set GUC_REPORT on GUC's that currently do not have that option set. Etsuro Fujita sent in another revision of a patch to improve the partition matching algorithm for partition-wise join. Thomas Munro sent in a patch to fix a bug that could try to freeze running multixacts. Masahiko Sawada sent in another revision of a patch to add a parallel option to VACUUM and friends. Asif Rehman sent in two more revisions of a patch to implement parallel backup. Dilip Kumar and Amit Kapila traded patches to fix an issue in GiST vacuum. Takeshi Ideriha sent in two more revisions of a patch to put in place infrastructure for a global system catalog cache. Michaël Paquier sent in another revision of a patch to add a flag to format_type_extended to enforce NULL-ness, refactor the format procedure and operator APIs to be more modular, and eliminate user-visible cache lookup errors for objaddr SQL functions. Peter Smith sent in another revision of a patch to add a pg_stat_sql view and a track_statement_statistics GUC to support it. Fabien COELHO sent in another revision of a patch to pgbench to extend the initialization phase control. Thomas Munro sent in another revision of a patch to add an option to use ICU as global collation provider. Lars Kanis and Michaël Paquier traded patches to fix a wrong connection status on invalid "connect_timeout" setting. Julien Rouhaud sent in a patch to fix timeout detection in logical worker. Michaël Paquier sent in a patch to remove the remaining calls to heap_close/heap_open in the tree. Takamichi Osumi sent in another revision of a patch to implement CREATE OR REPLACE TRIGGER. Michael Banck sent in a patch to fix base backup checksum verification for random or zero page headers. Corey Huinker sent in a patch to add badges to the documentation. Etsuro Fujita and Álvaro Herrera traded patches to simplify some switch patterns in partbounds.c. Colin Watson sent in a patch to backport "WITH ... AS MATERIALIZED" syntax to versions before 12. Takayuki Tsunakawa sent in a patch to fix fake unlogged LSN initialization. Alexander Lakhin sent in a patch to remove obsolete options for createuser. Adrien Nayrat sent in another revision of a patch to add log_min_duration_sample and log_statement_sample_rate GUCs with supporting infrastructure. Alexander Korotkov sent in another revision of a patch to implement the jsonpath .datetime() method. Pavel Stěhule sent in another revision of a patch to implement dropdb --force. Peter Eisentraut sent in a patch to remove obsolete information schema tables.
pgsql-announce by date: