Thread

  1. Re: CREATE TABLE LIKE INCLUDING TRIGGERS

    jian he <jian.universality@gmail.com> — 2025-12-29T01:26:06Z

    hi.
    
    in CreateTrigger, we have comments:
    
     * relOid, if nonzero, is the relation on which the trigger should be
     * created.  If zero, the name provided in the statement will be looked up.
     *
     * refRelOid, if nonzero, is the relation to which the constraint trigger
     * refers.  If zero, the constraint relation name provided in the statement
     * will be looked up as needed.
    
    We can put these two parameters into the CreateTrigStmt.
    change it from
    CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
                  Oid relOid, Oid refRelOid, Oid constraintOid, Oid indexOid,
                  Oid funcoid, Oid parentTriggerOid, Node *whenClause,
                  bool isInternal, bool in_partition)
    to:
    
    CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
                  Oid constraintOid, Oid indexOid,
                  Oid funcoid, Oid parentTriggerOid, Node *whenClause,
                  bool isInternal, bool in_partition)
    
    This is needed, ProcessUtilitySlow->CreateTrigger don't have the new
    target table relation OID information, using CreateTrigStmt.relation
    would cause repeated name lookup issue.
    
    v3-0001 and v3-0002 refactor the CreateTrigger function.
    The parameters relOid and refRelOid are removed and instead added to the
    CreateTrigStmt structure.
    
    These two patch (v3-0001, v3-0002) will also be used in [1]
    [1]: https://postgr.es/m/CACJufxGkqYrmwMdvUOUPet0443oUTgF_dKCpw3TfJiutfuywAQ@mail.gmail.com
    
    v3-0003 is for CREATE TABLE LIKE INCLUDING TRIGGERS.
    
    
    --
    jian
    https://www.enterprisedb.com/