On Tue, 28 Jun 2022 at 00:32, Julien Rouhaud <rjuju...@gmail.com> wrote:
> As to forcing SQL-complaint queries, that ship sailed a long time ago: > > Postgres allows but does not enforce the use of SQL-compliant queries, > and > > many of its important features are extensions anyway, so forcing SQL > > compliant queries is out of the question (although I could see the > utility > > of a mode where it warns or errors on non-compliant queries, at least in > > principle). > > Sure, but it doesn't mean that we should support even more non-compliant > syntax > without any restraint. In this case, I don't see much benefit as it's not > solving performance problem or something like that. > It's improving developer performance by eliminating the need to make up utterly useless names. I don't care if behind the scenes names are assigned, although it would be even better if the names didn't exist at all. I just want the computer to do stuff for me that requires absolutely no human judgement whatsoever. > As to bad habits, I'm having trouble understanding. Why do you think > > leaving the alias off a subquery is a bad habit (assuming it were > allowed)? > > I think It's a bad habit because as far as I can see it's not supported on > mysql or sqlserver. > So it’s a bad habit to use features of Postgres that aren’t available on MySQL or SQL Server? For myself, I don’t care one bit about whether my code will run on those systems, or Oracle: as far as I’m concerned I write Postgres applications, not SQL applications. Of course, many people have a need to support other systems, so I appreciate the care we take to document the differences from the standard, and I hope we will continue to support standard queries. But if it’s a bad habit to use Postgres-specific features, why do we create any of those features? > If the name is never used, why are we required to supply it? > > But similarly, I many times relied on the fact that writable CTE are > executed > even if not explicitly referenced. So by the same argument shouldn't we > allow > something like this? > > WITH (INSERT INTO t SELECT * pending WHERE ts < now()) > SELECT now() AS last_processing_time; > I’m not necessarily opposed to allowing this too. But the part which causes me annoyance is normal subquery naming.