MCPcopy
hub / github.com/sqldef/sqldef / triggers

Method triggers

database/postgres/database.go:656–708  ·  view source on GitHub ↗

triggers fetches user-defined triggers from the database

()

Source from the content-addressed store, hash-verified

654
655// triggers fetches user-defined triggers from the database
656func (d *PostgresDatabase) triggers() ([]string, error) {
657 // Query to get user-defined triggers (excluding internal triggers and extension triggers)
658 // We use pg_get_triggerdef to get the complete trigger definition
659 rows, err := d.db.Query(`
660 SELECT n.nspname AS trigger_schema,
661 c.relname AS table_name,
662 t.tgname AS trigger_name,
663 pg_get_triggerdef(t.oid) AS trigger_def,
664 obj_description(t.oid, 'pg_trigger') AS trigger_comment
665 FROM pg_catalog.pg_trigger t
666 INNER JOIN pg_catalog.pg_class c ON t.tgrelid = c.oid
667 INNER JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
668 WHERE n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast', 'sys')
669 AND NOT t.tgisinternal
670 AND NOT EXISTS (SELECT 1 FROM pg_depend d WHERE d.objid = t.oid AND d.classid = (SELECT oid FROM pg_catalog.pg_class WHERE relname = 'pg_trigger') AND d.deptype = 'e')
671 ORDER BY n.nspname, c.relname, t.tgname;
672 `)
673 if err != nil {
674 return nil, err
675 }
676 defer rows.Close()
677
678 var ddls []string
679 for rows.Next() {
680 var triggerSchema, tableName, triggerName, triggerDef string
681 var triggerComment sql.NullString
682 if err := rows.Scan(&triggerSchema, &tableName, &triggerName, &triggerDef, &triggerComment); err != nil {
683 return nil, err
684 }
685 if d.config.TargetSchema != nil && !slices.Contains(d.config.TargetSchema, triggerSchema) {
686 continue
687 }
688 // pg_get_triggerdef returns the complete CREATE TRIGGER statement
689 // We just need to ensure it ends with a semicolon
690 triggerDef = strings.TrimSpace(triggerDef)
691 if !strings.HasSuffix(triggerDef, ";") {
692 triggerDef += ";"
693 }
694 ddls = append(ddls, triggerDef)
695
696 // Add comment if exists
697 if triggerComment.Valid {
698 ddls = append(ddls, fmt.Sprintf(
699 "COMMENT ON TRIGGER %s ON %s.%s IS %s;",
700 d.quoteIdentifierIfNeeded(triggerName), d.quoteIdentifierIfNeeded(triggerSchema), d.quoteIdentifierIfNeeded(tableName), schemaLib.StringConstant(triggerComment.String),
701 ))
702 }
703 }
704 if err := rows.Err(); err != nil {
705 return nil, err
706 }
707 return ddls, nil
708}
709
710// CheckConstraint holds a CHECK constraint's name and definition.
711type CheckConstraint struct {

Callers 1

ExportDDLsMethod · 0.95

Calls 5

QueryMethod · 0.80
NextMethod · 0.80
ScanMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected