<feed xmlns='http://www.w3.org/2005/Atom'>
<title>WebStat analyser/src/schema.sql, branch webstat-0.5</title>
<subtitle>WebStat web site access analyser</subtitle>
<id>http://git.randomdan.homeip.net/repo/webstat/atom?h=webstat-0.5</id>
<link rel='self' href='http://git.randomdan.homeip.net/repo/webstat/atom?h=webstat-0.5'/>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/'/>
<updated>2026-05-09T23:41:56Z</updated>
<entry>
<title>Be specific about values from entities table</title>
<updated>2026-05-09T23:41:56Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-09T23:41:56Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=5111c39ad9c1665347471da9fc1ae5737e37cde5'/>
<id>urn:sha1:5111c39ad9c1665347471da9fc1ae5737e37cde5</id>
<content type='text'>
Fixes compatibility with PostgreSQL 18 which fails due to ambiguity.
</content>
</entry>
<entry>
<title>Only call entity insert handler if detail is null</title>
<updated>2026-05-05T11:24:11Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-05T11:24:11Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=200c3636b600ac2f997316612f1b1321112496cd'/>
<id>urn:sha1:200c3636b600ac2f997316612f1b1321112496cd</id>
<content type='text'>
Improves handling of entity inserts where the entity already exists and
already has detail; does not call the onInsert handler. This avoids
repeatedly fetching UA detail every time the UA is first seen by a
process.
</content>
</entry>
<entry>
<title>Add indexes on all entity references in access_log</title>
<updated>2026-04-26T15:14:50Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-04-26T15:14:50Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=ada3ab9f84dfa2df733d48d516476203a361ac63'/>
<id>urn:sha1:ada3ab9f84dfa2df733d48d516476203a361ac63</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add BRIN index to access_log.request_time and improve purge</title>
<updated>2026-04-23T09:11:13Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-04-23T09:11:13Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=7c59f2b66284b5b561c5368a0c834640ae0e611e'/>
<id>urn:sha1:7c59f2b66284b5b561c5368a0c834640ae0e611e</id>
<content type='text'>
Purge is now fully request_time based and not hacked around id ranges.
</content>
</entry>
<entry>
<title>Swap int for integer in schema</title>
<updated>2026-04-17T23:53:11Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-04-17T23:53:11Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=fa6074eaf52be4254c17b74f20193aa96c940df8'/>
<id>urn:sha1:fa6074eaf52be4254c17b74f20193aa96c940df8</id>
<content type='text'>
Plays better with apgdiff
</content>
</entry>
<entry>
<title>Replace use of crc32 for entity id</title>
<updated>2026-04-15T11:05:20Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-04-15T11:03:21Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=5b2166496e5f3ff2c4276e0b5b28f109c70673d5'/>
<id>urn:sha1:5b2166496e5f3ff2c4276e0b5b28f109c70673d5</id>
<content type='text'>
Entity value is MD5 hashed same as DB unique key, but the id itself is
now taken from the DB primary key which is sequence generated.
</content>
</entry>
<entry>
<title>Replace unique constraint on entity value with index on hash</title>
<updated>2026-03-18T13:19:42Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-03-18T13:19:42Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=076679d9f2b761a9e4892e399f1a16f141d85986'/>
<id>urn:sha1:076679d9f2b761a9e4892e399f1a16f141d85986</id>
<content type='text'>
UNIQUE CONSTRAINT is limited to 2704 bytes, which prevents inserting
large values. Here we swap to a unique index on the MD5 hash of the
value. This should more than suffice given we already map to a 32bit for
the id and the index size is much much smaller.
</content>
</entry>
<entry>
<title>Fix typo in access_log_view definition</title>
<updated>2026-03-18T10:25:09Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-03-18T10:25:09Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=e247e81f649297784dc81e83b2e6d33d30f9f3ee'/>
<id>urn:sha1:e247e81f649297784dc81e83b2e6d33d30f9f3ee</id>
<content type='text'>
Replaces accidentally duplicated user_agent for correct content_type.
</content>
</entry>
<entry>
<title>Process new field, content-type, in input stream</title>
<updated>2026-01-18T01:36:06Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-01-18T01:36:06Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=04acfa679fd846ac829ded5562093b3766c85154'/>
<id>urn:sha1:04acfa679fd846ac829ded5562093b3766c85154</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Attempt to save uninsertable log lines to the entities table</title>
<updated>2026-01-17T20:33:37Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-01-17T19:40:47Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=34051da2f27ffa40d0b6d20ae891a497fe73bfe5'/>
<id>urn:sha1:34051da2f27ffa40d0b6d20ae891a497fe73bfe5</id>
<content type='text'>
If that fails, we still park them as before, such as when the DB is
unavailable. Those which are saved as entities require investigation why
they couldn't be saved, much like UnparsableLines.
</content>
</entry>
</feed>
