--- a/triggers/common.c
+++ b/triggers/common.c
@@ -127,9 +127,9 @@ static void fill_magic_columns(PgqTrigge
 
 	for (i = 0; i < tupdesc->natts; i++) {
 		/* Skip dropped columns */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
-		col_name = NameStr(tupdesc->attrs[i]->attname);
+		col_name = NameStr(TupleDescAttr(tupdesc, i)->attname);
 		if (!is_magic_field(col_name))
 			continue;
 		if (strcmp(col_name, "_pgq_ev_type") == 0)
@@ -224,9 +224,14 @@ static void init_cache(void)
 	 */
 	tbl_cache_ctx = AllocSetContextCreate(TopMemoryContext,
 					      "pgq_triggers table info",
+#if (PG_VERSION_NUM >= 110000)
+					      ALLOCSET_SMALL_SIZES
+#else
 					      ALLOCSET_SMALL_MINSIZE,
 					      ALLOCSET_SMALL_INITSIZE,
-					      ALLOCSET_SMALL_MAXSIZE);
+					      ALLOCSET_SMALL_MAXSIZE
+#endif
+					      );
 
 	/*
 	 * init pkey cache.
@@ -502,7 +507,7 @@ static void parse_oldstyle_args(PgqTrigg
 	 */
 	tupdesc = tg->tg_relation->rd_att;
 	for (i = 0, attcnt = 0; i < tupdesc->natts; i++) {
-		if (!tupdesc->attrs[i]->attisdropped)
+		if (!TupleDescAttr(tupdesc, i)->attisdropped)
 			attcnt++;
 	}
 
@@ -624,9 +629,9 @@ bool pgqtriga_skip_col(PgqTriggerEvent *
 	const char *name;
 
 	tupdesc = tg->tg_relation->rd_att;
-	if (tupdesc->attrs[i]->attisdropped)
+	if (TupleDescAttr(tupdesc, i)->attisdropped)
 		return true;
-	name = NameStr(tupdesc->attrs[i]->attname);
+	name = NameStr(TupleDescAttr(tupdesc, i)->attname);
 
 	if (is_magic_field(name)) {
 		ev->tgargs->custom_fields = 1;
@@ -658,9 +663,9 @@ bool pgqtriga_is_pkey(PgqTriggerEvent *e
 		return ev->attkind[attkind_idx] == 'k';
 	} else if (ev->pkey_list) {
 		tupdesc = tg->tg_relation->rd_att;
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			return false;
-		name = NameStr(tupdesc->attrs[i]->attname);
+		name = NameStr(TupleDescAttr(tupdesc, i)->attname);
 		if (is_magic_field(name)) {
 			ev->tgargs->custom_fields = 1;
 			return false;
@@ -852,7 +857,7 @@ int pgq_is_interesting_change(PgqTrigger
 		/*
 		 * Ignore dropped columns
 		 */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 		attkind_idx++;
 
--- a/triggers/common.h
+++ b/triggers/common.h
@@ -1,3 +1,8 @@
+#if PG_VERSION_NUM < 100000
+/* from src/include/access/tupdesc.h, introduced in 2cd708452 */
+#define TupleDescAttr(tupdesc, i) ((tupdesc)->attrs[(i)])
+#endif
+
 enum PgqFields {
 	EV_TYPE = 0,
 	EV_DATA,
--- a/triggers/jsontriga.c
+++ b/triggers/jsontriga.c
@@ -164,7 +164,7 @@ static void pgq_jsonenc_row(PgqTriggerEv
 	appendStringInfoChar(buf, '{');
 	for (i = 0; i < tg->tg_relation->rd_att->natts; i++) {
 		/* Skip dropped columns */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		attkind_idx++;
@@ -183,7 +183,7 @@ static void pgq_jsonenc_row(PgqTriggerEv
 		appendStringInfoChar(buf, ':');
 
 		/* quote column value */
-		col_type = tupdesc->attrs[i]->atttypid;
+		col_type = TupleDescAttr(tupdesc, i)->atttypid;
 		col_datum = SPI_getbinval(row, tupdesc, i + 1, &isnull);
 		col_value = NULL;
 		if (isnull) {
--- a/triggers/makesql.c
+++ b/triggers/makesql.c
@@ -71,7 +71,7 @@ static void process_insert(PgqTriggerEve
 		char *col_ident;
 
 		/* Skip dropped columns */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		/* Check if allowed by colstring */
@@ -103,7 +103,7 @@ static void process_insert(PgqTriggerEve
 		char *col_value;
 
 		/* Skip dropped columns */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		/* Check if allowed by colstring */
@@ -154,7 +154,7 @@ static int process_update(PgqTriggerEven
 		/*
 		 * Ignore dropped columns
 		 */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		attkind_idx++;
@@ -240,7 +240,7 @@ static int process_update(PgqTriggerEven
 			return 0;
 
 		for (i = 0, attkind_idx = -1; i < tupdesc->natts; i++) {
-			if (tupdesc->attrs[i]->attisdropped)
+			if (TupleDescAttr(tupdesc, i)->attisdropped)
 				continue;
 
 			attkind_idx++;
@@ -259,7 +259,7 @@ static int process_update(PgqTriggerEven
 		/*
 		 * Ignore dropped columns
 		 */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		attkind_idx++;
@@ -291,7 +291,7 @@ static void process_delete(PgqTriggerEve
 	int attkind_idx;
 
 	for (i = 0, attkind_idx = -1; i < tupdesc->natts; i++) {
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		attkind_idx++;
@@ -323,7 +323,7 @@ int pgqtriga_make_sql(PgqTriggerEvent *e
 	 * Count number of active columns
 	 */
 	for (i = 0, attcnt = 0; i < tupdesc->natts; i++) {
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 		attcnt++;
 	}
--- a/triggers/logutriga.c
+++ b/triggers/logutriga.c
@@ -43,7 +43,7 @@ void pgq_urlenc_row(PgqTriggerEvent *ev,
 
 	for (i = 0; i < tg->tg_relation->rd_att->natts; i++) {
 		/* Skip dropped columns */
-		if (tupdesc->attrs[i]->attisdropped)
+		if (TupleDescAttr(tupdesc, i)->attisdropped)
 			continue;
 
 		attkind_idx++;
