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 1rKR6D-002ebv-Qw for pgsql-www@arkaria.postgresql.org; Mon, 01 Jan 2024 22:49:33 +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 1rKR5B-00DPZH-Kr for pgsql-www@arkaria.postgresql.org; Mon, 01 Jan 2024 22:48:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rKR5B-00DPZ9-Dm for pgsql-www@lists.postgresql.org; Mon, 01 Jan 2024 22:48:29 +0000 Received: from janus.karlpinc.com ([173.161.46.12] helo=smtp.karlpinc.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rKR56-00F3as-Ec for pgsql-www@lists.postgresql.org; Mon, 01 Jan 2024 22:48:28 +0000 Received: from slate.karlpinc.com (unknown [192.168.1.14]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.karlpinc.com (Postfix) with ESMTPS id 6A8BAA2AE; Mon, 1 Jan 2024 16:48:21 -0600 (CST) Received: from slate.karlpinc.com (localhost [IPv6:::1]) by slate.karlpinc.com (Postfix) with ESMTPS id 251B23FD53; Mon, 1 Jan 2024 16:48:21 -0600 (CST) Date: Mon, 1 Jan 2024 16:48:19 -0600 From: "Karl O. Pinc" To: "Jonathan S. Katz" Cc: Benjamin Scherrey , pgsql-www@lists.postgresql.org, Vik Fearing , Bruce Momjian , Tom Lane Subject: Re: Describing Postgres as "object-relational" on the home page Message-ID: <20240101164819.26ab1c71@slate.karlpinc.com> In-Reply-To: <20240101141516.5a9274ee@slate.karlpinc.com> References: <20231226131047.493259f8@slate.karlpinc.com> <20231228135446.3ba508d5@slate.karlpinc.com> <20231231114052.30eccee6@slate.karlpinc.com> <20240101134459.0d23672b@slate.karlpinc.com> <20240101141516.5a9274ee@slate.karlpinc.com> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/0n9gIFywU4e48p_=xnXM9tg" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --MP_/0n9gIFywU4e48p_=xnXM9tg Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline This email contains nothing really new. Feel free to skip it if you've little interest in a word cloud. Attached is a corrected CSV file, with "table inheritance" duplicates removed. (It is only an example data set, but the duplicates confused things.) On Mon, 1 Jan 2024 14:15:16 -0600 "Karl O. Pinc" wrote: > On Mon, 1 Jan 2024 13:44:59 -0600 > "Karl O. Pinc" wrote: > > > Categorizing the keywords by attaching one or more tags to each > > opens up possibilities for interaction and alternate ways to view > > the keywords. > > -- A back of the envelope schema for tagged technology keywords > > CREATE TABLE keywords ( > keyword TEXT PRIMARY KEY, > url TEXT, > cantag BOOLEAN); > > CREATE TABLE taggings ( > tag TEXT REFERENCES keywords, > keyword TEXT REFERENCES keywords); > > -- And a trigger is needed to ensure that taggings.tag > -- is related to a keywords row having a keywords.cantag value of > true. Except that I'd allow/require a row in TAGGINGS for every row in KEYWORDS, and the Tag and Keyword columns would contain the same value. That way TAGGINGS will always inner join with KEYWORDS. FWIW, here's a list of the 12 tags (aka categories) of my example: AI atomicity auditing concurrency database types data integrity high availability high performance interfaces object-relational security SQL standards Produced by: ut -d , -f 2 pg_keywords.csv | sort | awk 'BEGIN {last="";}; {if ($0 == last && last != "") print $0; else last = $0};' | sort -u The list of tags, and keywords, is what I feel like is missing from the pgxn.org site's interface. (In their case it's not keywords, but extensions, that are categorized. They do allow a search-by-typing rather than having to find the category in the word cloud and click on it.) It could also be nice if the user was able to omit tags from the word cloud so that words taking up lots of space can be omitted to make room for other words. I am drawn to the idea of being able to search, explain, visualize, and link directly into, the PostgreSQL ecosystem writ-large. The tricky work is likely in choosing the links of the keywords. I would think that a lot of them ("SQL", "SQL standards", "transactions") have a place already in the documentation. But a lot would go off-site, or at least I'd think so because the pg wiki does not presently have enough content and probably shouldn't describe, say, exactly what "object-relational" means. (Humm. One of the temporal extensions would really allow this feature to support wiki-like history and rollback capabilities. https://wiki.postgresql.org/wiki/Temporal_Extensions ) Regards, Karl Free Software: "You don't pay back, you pay forward." -- Robert A. Heinlein --MP_/0n9gIFywU4e48p_=xnXM9tg Content-Type: text/csv Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=pg_keywords.csv keyword,tag transactions,transactions transactions,SQL standards transactions,data integrity transactions,atomicity consistency,consistency consistency,data integrity constraints,constraints constraints,data integrity constraints,SQL standards isolation,isolation isolation,SQL standards isolation,concurrency atomicity,atomicity atomicity,SQL standards durability,durability durability,data integrity durability,SQL standards SQL,SQL SQL,SQL standards SQL,interfaces geospatial,geospatial geospatial,database types spatial,spatial spatial,database types time series,time series time series,database types temporal,temporal temporal,database types temporal,auditing temporal,security vector,vector vector,database types vector,AI AI,AI failover,failover failover,high availability high availability,high availability clustering,clustering clustering,high availabiltiy clustering,high performance partition,partition partition,high performance table inheritance,table inheritance table inheritance,SQL standards table inheritance,object-relational extensible types,extensible types extensible types,object-relational relational,relational relational,database types client-server,client-server client-server,database types GUI,GUI GUI,interfaces views,views views,interfaces views,SQL standards materialized views,materialized views materialized views,interfaces materialized views,SQL standards materialized views,high performance triggers,triggers triggers,data integrity triggers,SQL standards stored procedures,stored procedures stored procedures,SQL standards stored procedures,high performance row level security,row level security row level security,SQL standards row level security,security SELinux,SELinux SELinux,security security,security SQL standards,SQL standards data integrity,data integrity auditing,auditing auditing,security concurrency,concurrency interfaces,interfaces database types,database types high performance,high performance object-relational,object-relational object-relational,database types security,security --MP_/0n9gIFywU4e48p_=xnXM9tg--