package mainimport ("context""fmt""log""time""github.com/jackc/pgx""github.com/kyleconroy/pgoutput")funcmain() {ctx:=context.Background()config:= pgx.ConnConfig{Database:"opsdash",User:"replicant"}conn,err:=pgx.ReplicationConnect(config)iferr!=nil {log.Fatal(err)}// Create a slot if it doesn't already exist// if err := conn.CreateReplicationSlot("sub2", "pgoutput"); err != nil {// log.Fatalf("Failed to create replication slot: %v", err)// }set:=pgoutput.NewRelationSet()dump:=func(relationuint32,row []pgoutput.Tuple)error {values,err:=set.Values(relation,row)iferr!=nil {returnfmt.Errorf("error parsing values: %s",err)}forname,value:=rangevalues {val:=value.Get()log.Printf("%s (%T): %#v",name,val,val)}returnnil}handler:=func(m pgoutput.Message)error {switchv:=m.(type) {case pgoutput.Relation:log.Printf("RELATION")set.Add(v)case pgoutput.Insert:log.Printf("INSERT")returndump(v.RelationID,v.Row)case pgoutput.Update:log.Printf("UPDATE")returndump(v.RelationID,v.Row)case pgoutput.Delete:log.Printf("DELETE")returndump(v.RelationID,v.Row)}returnnil}replication:= pgoutput.LogicalReplication{Subscription:"sub2",Publication:"pub2",WaitTimeout:time.Second*10,StatusTimeout:time.Second*10,Handler:handler,}iferr:=replication.Start(ctx,conn);err!=nil {log.Fatal(err)}}