diff --git a/doc/src/sgml/ref/alter_property_graph.sgml b/doc/src/sgml/ref/alter_property_graph.sgml
index 604c518011..0a20b482b8 100644
--- a/doc/src/sgml/ref/alter_property_graph.sgml
+++ b/doc/src/sgml/ref/alter_property_graph.sgml
@@ -33,7 +33,7 @@ ALTER PROPERTY GRAPH <replaceable class="parameter">name</replaceable> DROP
 
 ALTER PROPERTY GRAPH <replaceable class="parameter">name</replaceable> ALTER
     {VERTEX|NODE|EDGE|RELATIONSHIP} TABLE <replaceable class="parameter">element_table_alias</replaceable>
-    { ADD LABEL <replaceable class="parameter">label_name</replaceable> [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] ) ] } [ ... ]
+    { ADD LABEL <replaceable class="parameter">label_name</replaceable> [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ALL COLUMNS EXCEPT | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] ) ] } [ ... ]
 
 ALTER PROPERTY GRAPH <replaceable class="parameter">name</replaceable> ALTER
     {VERTEX|NODE|EDGE|RELATIONSHIP} TABLE <replaceable class="parameter">element_table_alias</replaceable>
diff --git a/doc/src/sgml/ref/create_property_graph.sgml b/doc/src/sgml/ref/create_property_graph.sgml
index f88d1194cb..36b710cf7b 100644
--- a/doc/src/sgml/ref/create_property_graph.sgml
+++ b/doc/src/sgml/ref/create_property_graph.sgml
@@ -38,11 +38,11 @@ CREATE [ TEMP | TEMPORARY ] PROPERTY GRAPH <replaceable class="parameter">name</
 
 <phrase>and <replaceable class="parameter">element_table_label_and_properties</replaceable> is either:</phrase>
 
-    NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] )
+    NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] ) | PROPERTIES ALL COLUMNS EXCEPT( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] )
 
 <phrase>or:</phrase>
 
-   { { LABEL <replaceable class="parameter">label_name</replaceable> | DEFAULT LABEL } [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] ) ] } [...]
+   { { LABEL <replaceable class="parameter">label_name</replaceable> | DEFAULT LABEL } [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] ) ] } [...] | PROPERTIES ALL COLUMNS EXCEPT( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] )
 </synopsis>
 </refsynopsisdiv>
 
@@ -185,6 +185,9 @@ CREATE [ TEMP | TEMPORARY ] PROPERTY GRAPH <replaceable class="parameter">name</
       expressions, which can refer to the columns of the underlying table, can
       be specified as properties.  If the expressions are not a plain column
       reference, then an explicit property name must also be specified.
+      To expose all the visible columns of the graph element table as label properties
+      except those that are explicitly listed use
+     <literal>PROPERTIES ALL COLUMNS EXCEPT( { <replaceable class="parameter">expression</replaceable> [ AS <replaceable class="parameter">property_name</replaceable> ] } [, ...] )</literal>
      </para>
     </listitem>
    </varlistentry>
diff --git a/src/backend/commands/propgraphcmds.c b/src/backend/commands/propgraphcmds.c
index f204fc3125..7d46080702 100644
--- a/src/backend/commands/propgraphcmds.c
+++ b/src/backend/commands/propgraphcmds.c
@@ -700,6 +700,8 @@ insert_property_records(Oid graphid, Oid ellabeloid, Oid pgerelid, const PropGra
 	Relation	rel;
 	ListCell   *lc;
 
+	pstate = make_parsestate(NULL);
+
 	if (properties->all)
 	{
 		Relation	attRelation;
@@ -719,10 +721,40 @@ insert_property_records(Oid graphid, Oid ellabeloid, Oid pgerelid, const PropGra
 			Form_pg_attribute att = (Form_pg_attribute) GETSTRUCT(attributeTuple);
 			ColumnRef  *cr;
 			ResTarget  *rt;
+			bool exceptional = false;
 
 			if (att->attnum <= 0 || att->attisdropped)
 				continue;
 
+			/* Skip the attribute if exists in except column list */
+			if (properties->except)
+			{
+				char *cname = NULL;
+
+				foreach(lc, properties->except)
+				{
+					rt = lfirst_node(ResTarget, lc);
+					cr = (ColumnRef *) rt->val;
+					cname = strVal(linitial(cr->fields));
+
+					if (!get_attnum(pgerelid, cname))
+						ereport(ERROR,
+								(errcode(ERRCODE_UNDEFINED_COLUMN),
+								errmsg("column \"%s\" of relation \"%s\" does not exist",
+										cname, get_rel_name(pgerelid)),
+								parser_errposition(pstate, rt->location)));
+
+					if (strcmp(cname, NameStr(att->attname)) == 0)
+					{
+						exceptional = true;
+						break;
+					}
+				}
+			}
+
+			if (exceptional)
+				continue;
+
 			cr = makeNode(ColumnRef);
 			rt = makeNode(ResTarget);
 
@@ -756,7 +788,6 @@ insert_property_records(Oid graphid, Oid ellabeloid, Oid pgerelid, const PropGra
 
 	rel = table_open(pgerelid, AccessShareLock);
 
-	pstate = make_parsestate(NULL);
 	nsitem = addRangeTableEntryForRelation(pstate,
 										   rel,
 										   AccessShareLock,
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 03016742cb..8bd5fd16af 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -9383,6 +9383,16 @@ element_table_properties:
 					pr->all = true;
 					pr->location = @1;
 
+					$$ = (Node *) pr;
+				}
+			| PROPERTIES ALL COLUMNS EXCEPT '(' xml_attribute_list ')'
+				{
+					PropGraphProperties *pr = makeNode(PropGraphProperties);
+
+					pr->all = true;
+					pr->except = $6;
+					pr->location = @1;
+
 					$$ = (Node *) pr;
 				}
 			| PROPERTIES '(' xml_attribute_list ')'
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index c4223fda57..64d9e79b83 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -4119,6 +4119,7 @@ typedef struct PropGraphProperties
 {
 	NodeTag		type;
 	List	   *properties;
+	List  		*except;
 	bool		all;
 	ParseLoc	location;
 } PropGraphProperties;
diff --git a/src/test/regress/expected/create_property_graph.out b/src/test/regress/expected/create_property_graph.out
index 43316fbc02..c4a28674a0 100644
--- a/src/test/regress/expected/create_property_graph.out
+++ b/src/test/regress/expected/create_property_graph.out
@@ -491,6 +491,52 @@ DROP PROPERTY GRAPH g1;  -- error: does not exist
 ERROR:  property graph "g1" does not exist
 DROP PROPERTY GRAPH IF EXISTS g1;
 NOTICE:  property graph "g1" does not exist, skipping
+-- test except column name list
+CREATE PROPERTY GRAPH except_list_test
+    VERTEX TABLES (t1 KEY (a), t2 KEY (i) LABEL l1 PROPERTIES ALL COLUMNS EXCEPT (k))
+    EDGE TABLES (
+        e1
+            SOURCE KEY (a) REFERENCES t1 (a)
+            DESTINATION KEY (i) REFERENCES t2 (i)
+    );
+ALTER PROPERTY GRAPH except_list_test ALTER VERTEX TABLE t2 ADD LABEL l2 PROPERTIES ALL COLUMNS EXCEPT (invalid_cname, j); -- error: invalid col name
+ERROR:  column "invalid_cname" of relation "t2" does not exist
+ALTER PROPERTY GRAPH except_list_test ALTER VERTEX TABLE t2 ADD LABEL l2 PROPERTIES ALL COLUMNS EXCEPT (k, j);
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.i));
+ i 
+---
+(0 rows)
+
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.j)); 
+ j 
+---
+(0 rows)
+
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.k)); -- error: does not exist
+ERROR:  property "k" does not exist
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.i));
+ i 
+---
+(0 rows)
+
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.j)); -- error: does not exist
+ERROR:  property "j" of element variable "p" not found
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.k)); -- error: does not exist
+ERROR:  property "k" does not exist
+SELECT * FROM information_schema.pg_label_properties WHERE property_graph_name = 'except_list_test';
+ property_graph_catalog |    property_graph_schema    | property_graph_name | label_name | property_name 
+------------------------+-----------------------------+---------------------+------------+---------------
+ regression             | create_property_graph_tests | except_list_test    | e1         | a
+ regression             | create_property_graph_tests | except_list_test    | e1         | i
+ regression             | create_property_graph_tests | except_list_test    | e1         | t
+ regression             | create_property_graph_tests | except_list_test    | l1         | i
+ regression             | create_property_graph_tests | except_list_test    | l1         | j
+ regression             | create_property_graph_tests | except_list_test    | l2         | i
+ regression             | create_property_graph_tests | except_list_test    | t1         | a
+ regression             | create_property_graph_tests | except_list_test    | t1         | b
+(8 rows)
+
+DROP PROPERTY GRAPH except_list_test;
 -- leave for pg_upgrade/pg_dump tests
 --DROP SCHEMA create_property_graph_tests CASCADE;
 DROP ROLE regress_graph_user1, regress_graph_user2;
diff --git a/src/test/regress/sql/create_property_graph.sql b/src/test/regress/sql/create_property_graph.sql
index 4f9b5c0349..bd85fd0278 100644
--- a/src/test/regress/sql/create_property_graph.sql
+++ b/src/test/regress/sql/create_property_graph.sql
@@ -184,6 +184,29 @@ DROP PROPERTY GRAPH g1;  -- error: does not exist
 
 DROP PROPERTY GRAPH IF EXISTS g1;
 
+-- test except column name list
+
+CREATE PROPERTY GRAPH except_list_test
+    VERTEX TABLES (t1 KEY (a), t2 KEY (i) LABEL l1 PROPERTIES ALL COLUMNS EXCEPT (k))
+    EDGE TABLES (
+        e1
+            SOURCE KEY (a) REFERENCES t1 (a)
+            DESTINATION KEY (i) REFERENCES t2 (i)
+    );
+
+ALTER PROPERTY GRAPH except_list_test ALTER VERTEX TABLE t2 ADD LABEL l2 PROPERTIES ALL COLUMNS EXCEPT (invalid_cname, j); -- error: invalid col name
+ALTER PROPERTY GRAPH except_list_test ALTER VERTEX TABLE t2 ADD LABEL l2 PROPERTIES ALL COLUMNS EXCEPT (k, j);
+
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.i));
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.j)); 
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l1) COLUMNS(p.k)); -- error: does not exist
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.i));
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.j)); -- error: does not exist
+SELECT * FROM GRAPH_TABLE(except_list_test MATCH (p:l2) COLUMNS(p.k)); -- error: does not exist
+
+SELECT * FROM information_schema.pg_label_properties WHERE property_graph_name = 'except_list_test';
+
+DROP PROPERTY GRAPH except_list_test;
 -- leave for pg_upgrade/pg_dump tests
 --DROP SCHEMA create_property_graph_tests CASCADE;
 
