On Tue, Mar 30, 2021, at 10:24, Pavel Stehule wrote:
> 
>> 
>> I think this is a good example of where this improves the situation the most,
>> when you have multiple joins of the same table, forcing you to come up with 
>> multiple aliases
>> for the same table, keeping them all in memory while writing and reading 
>> such queries.
> 
> ...
> I remember multiple self joins only when developers used an EAV model. This 
> is an antipattern, and today we have better tools, and we don't need it.  It 
> is scary, because it is completely against the relational model.

No, you are mistaken. There are no self-joins in any of the examples I 
presented.
I merely joined in the same table multiple times, but not with itself, so it's 
not a self join.

Here is the query again, it doesn't contain any self-joins:

    SELECT
      format
      (
        'ALTER TABLE %I.%I RENAME CONSTRAINT %I TO %I;',
        conrel_nsp.nspname,
        conrel.relname,
        pg_constraint.conname,
        confrel.relname
      ) AS sql_cmd,
      COUNT(*) OVER (PARTITION BY pg_constraint.conrelid, 
pg_constraint.confrelid)
      AS count_foreign_keys_to_same_table
    FROM pg_constraint
    JOIN pg_class AS conrel
      ON conrel.oid = pg_constraint.conrelid
    JOIN pg_class AS confrel
      ON confrel.oid = pg_constraint.confrelid
    JOIN pg_namespace AS conrel_nsp
      ON conrel_nsp.oid = conrel.relnamespace
    WHERE pg_constraint.contype = 'f'

Where would the antipattern be here?

/Joel

Reply via email to