[libgda/LIBGDA_4.0] SQL identifiers quoting now done by database providers



commit abd719a7b3cd2f0b335dd84ba5af169ca3623cc7
Author: Vivien Malerba <malerba gnome-db org>
Date:   Thu Jul 9 22:04:51 2009 +0200

    SQL identifiers quoting now done by database providers
    
    As MySQL's quoting is made using the '`' character, quoting SQL identifiers
    can only be done by the database providers themselves, thus the new
    gda_sql_identifier_quote() function.
    
    This commit also uses (for MySQL and PostgreSQL) reserved keywords lists
    depending on the server version, and corrects some small errors.
    
    Some test data has also been corrected because "public" is a reserved
    SQL standard keyword.

 doc/C/libgda-4.0-docs.sgml                         |    4 -
 doc/C/libgda-4.0-sections.txt                      |    1 +
 doc/C/tmpl/gda-server-provider.sgml                |    2 +-
 doc/C/tmpl/gda-sql-parser.sgml                     |   13 +
 libgda/Makefile.am                                 |    4 +-
 libgda/gda-data-meta-wrapper.c                     |    7 +
 libgda/gda-server-provider.h                       |    6 +-
 libgda/gda-util.c                                  |  144 +++++-
 libgda/gda-util.h                                  |    4 +-
 libgda/information_schema.xml                      |   12 +-
 libgda/libgda.symbols                              |    1 +
 libgda/sqlite/Makefile.am                          |    7 +-
 libgda/sqlite/gda-sqlite-meta.c                    |    2 +
 libgda/sqlite/keywords.list                        |    3 +
 libgda/sqlite/keywords_hash.h                      |   41 ++
 libgda/sqlite/mkkeywordhash.c                      |  162 +++---
 providers/mysql/Makefile.am                        |   19 +-
 providers/mysql/gda-mysql-meta.c                   |  126 +++--
 providers/mysql/gda-mysql-provider.c               |  171 ++++++-
 providers/mysql/gda-mysql-recordset.c              |    1 +
 providers/mysql/gda-mysql-util.c                   |   34 ++
 providers/mysql/gda-mysql-util.h                   |   25 +-
 providers/mysql/gda-mysql.h                        |    1 +
 providers/mysql/keywords_V50.list                  |   80 +++
 providers/mysql/keywords_V51.list                  |   80 +++
 providers/mysql/keywords_V54.list                  |   79 +++
 providers/mysql/keywords_V60.list                  |   81 +++
 providers/postgres/Makefile.am                     |   17 +-
 providers/postgres/gda-postgres-meta.c             |  193 +++++--
 providers/postgres/gda-postgres-provider.c         |   86 +++
 providers/postgres/gda-postgres-util.c             |   34 ++
 providers/postgres/gda-postgres-util.h             |    5 +
 providers/postgres/gda-postgres.h                  |    1 +
 providers/postgres/keywords.list                   |  101 ----
 providers/postgres/keywords_82.list                |  345 ++++++++++++
 providers/postgres/keywords_83.list                |  144 +++++
 providers/postgres/keywords_84.list                |  150 +++++
 providers/skel-implementation/capi/Makefile.am     |   17 +-
 providers/skel-implementation/capi/gda-capi-meta.c |    3 +
 providers/skel-implementation/capi/keywords.list   |   13 +
 tests/.gitignore                                   |    1 +
 tests/Makefile.am                                  |    9 +-
 tests/meta-store/common.c                          |    2 +-
 tests/meta-store/data_columns.csv                  |  572 ++++++++++----------
 tests/meta-store/data_key_column_usage.csv         |  274 +++++-----
 tests/meta-store/data_referential_constraints.csv  |   38 +-
 tests/meta-store/data_schemata.csv                 |    2 +-
 tests/meta-store/data_table_constraints.csv        |  388 +++++++-------
 tests/meta-store/data_tables.csv                   |   66 ++--
 tests/meta-store/data_view_column_usage.csv        |  112 ++--
 tests/meta-store/data_views.csv                    |   10 +-
 tests/test-identifiers-quotes.c                    |  200 +++++++
 52 files changed, 2829 insertions(+), 1064 deletions(-)
---
diff --git a/doc/C/libgda-4.0-docs.sgml b/doc/C/libgda-4.0-docs.sgml
index 440d033..b4cde79 100644
--- a/doc/C/libgda-4.0-docs.sgml
+++ b/doc/C/libgda-4.0-docs.sgml
@@ -447,10 +447,6 @@
 		colons, commas or spaces)</para>
 	    </listitem>
 	    <listitem>
-              <para>GDA_CONNECTION_COMMANDS_SHOW: if set, then all the commands issued to a server will be
-		displayed on STDOUT</para>
-	    </listitem>
-	    <listitem>
               <para>GDA_PROVIDERS_ROOT_DIR: if set, must point to the directory where the providers files are (providers
 	      files are shared libraries)</para>
 	    </listitem>
diff --git a/doc/C/libgda-4.0-sections.txt b/doc/C/libgda-4.0-sections.txt
index a58863e..ec3e281 100644
--- a/doc/C/libgda-4.0-sections.txt
+++ b/doc/C/libgda-4.0-sections.txt
@@ -1108,6 +1108,7 @@ gda_sql_parser_parse_string
 gda_sql_parser_parse_string_as_batch
 gda_sql_parser_parse_file_as_batch
 <SUBSECTION>
+gda_sql_identifier_quote
 gda_sql_identifier_needs_quotes
 gda_sql_identifier_add_quotes
 gda_sql_identifier_remove_quotes
diff --git a/doc/C/tmpl/gda-server-provider.sgml b/doc/C/tmpl/gda-server-provider.sgml
index bac09d7..0694cc0 100644
--- a/doc/C/tmpl/gda-server-provider.sgml
+++ b/doc/C/tmpl/gda-server-provider.sgml
@@ -65,7 +65,7 @@ Base class for all the DBMS providers
 @create_connection: 
 @meta_funcs: 
 @xa_funcs: 
- _gda_reserved1: 
+ identifier_quote: 
 @_gda_reserved2: 
 @_gda_reserved3: 
 @_gda_reserved4: 
diff --git a/doc/C/tmpl/gda-sql-parser.sgml b/doc/C/tmpl/gda-sql-parser.sgml
index 9e22e90..16a4dc3 100644
--- a/doc/C/tmpl/gda-sql-parser.sgml
+++ b/doc/C/tmpl/gda-sql-parser.sgml
@@ -178,6 +178,19 @@ Modifies the behaviour of the tokenizer, reserved for #GdaServerProvider impleme
 @Returns: 
 
 
+<!-- ##### FUNCTION gda_sql_identifier_quote ##### -->
+<para>
+
+</para>
+
+ id: 
+ cnc: 
+ prov: 
+ meta_store_convention: 
+ force_quotes: 
+ Returns: 
+
+
 <!-- ##### FUNCTION gda_sql_identifier_needs_quotes ##### -->
 <para>
 
diff --git a/libgda/Makefile.am b/libgda/Makefile.am
index 4c8b09b..5207e34 100644
--- a/libgda/Makefile.am
+++ b/libgda/Makefile.am
@@ -30,8 +30,8 @@ gda-marshal.c: gda-marshal.list $(GLIB_GENMARSHAL)
 mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
 	$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
 
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
-	./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/keywords.list
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/keywords.list > keywords_hash.c
 
 gda_headers = \
 	gda-attributes-manager.h \
diff --git a/libgda/gda-data-meta-wrapper.c b/libgda/gda-data-meta-wrapper.c
index f6355b9..5bc5ee3 100644
--- a/libgda/gda-data-meta-wrapper.c
+++ b/libgda/gda-data-meta-wrapper.c
@@ -27,6 +27,13 @@
 #include <libgda/gda-enums.h>
 #include <libgda/gda-data-model.h>
 #include <libgda/sql-parser/gda-statement-struct-util.h>
+
+/* we don't want to duplicate the symbols in <libgda/sqlite/keywords_hash.h>, so simply
+ * declare them as external
+ */
+extern const unsigned char UpperToLower[];
+#define charMap(X) UpperToLower[(unsigned char)(X)]
+extern int casecmp(const char *zLeft, const char *zRight, int N);
 #include "keywords_hash.c" /* this one is dynamically generated */
 
 /*
diff --git a/libgda/gda-server-provider.h b/libgda/gda-server-provider.h
index de5b9ef..6a8db44 100644
--- a/libgda/gda-server-provider.h
+++ b/libgda/gda-server-provider.h
@@ -294,8 +294,12 @@ struct _GdaServerProviderClass {
 	/* distributed transaction */
 	GdaServerProviderXa       *xa_funcs; /* it is a pointer! => set to %NULL if unsupported by provider */
 
+	/* SQL identifiers quoting */
+	gchar                  *(* identifier_quote)    (GdaServerProvider *provider, GdaConnection *cnc,
+							 const gchar *id,
+							 gboolean meta_store_convention, gboolean force_quotes);
+
 	/* Padding for future expansion */
-	void                    (*_gda_reserved1)        (void);
 	void                    (*_gda_reserved2)        (void);
 	void                    (*_gda_reserved3)        (void);
 	void                    (*_gda_reserved4)        (void);
diff --git a/libgda/gda-util.c b/libgda/gda-util.c
index c4595c1..6fed8d0 100644
--- a/libgda/gda-util.c
+++ b/libgda/gda-util.c
@@ -30,6 +30,7 @@
 #include <glib/gi18n-lib.h>
 #include <libgda/gda-log.h>
 #include <libgda/gda-util.h>
+#include <libgda/gda-server-provider.h>
 #include <libgda/gda-column.h>
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
@@ -39,9 +40,19 @@
 
 #include <libgda/binreloc/gda-binreloc.h>
 
+/* we don't want to duplicate the symbols in <libgda/sqlite/keywords_hash.h>, so simply
+ * declare them as external
+ */
+extern const unsigned char UpperToLower[];
+#define charMap(X) UpperToLower[(unsigned char)(X)]
+extern int casecmp(const char *zLeft, const char *zRight, int N);
+#include "keywords_hash.c" /* this one is dynamically generated */
+
 extern gchar *gda_lang_locale;
 extern GdaAttributesManager *gda_holder_attributes_manager;
 
+#define PROV_CLASS(provider) (GDA_SERVER_PROVIDER_CLASS (G_OBJECT_GET_CLASS (provider)))
+
 /**
  * gda_g_type_to_string
  * @type: Type to convert from.
@@ -767,6 +778,25 @@ dml_statements_check_select_structure (GdaConnection *cnc, GdaSqlStatement *sel_
 	return TRUE;
 }
 
+static gchar *
+add_quotes (const gchar *ident)
+{
+	gchar *str;
+
+	str = g_strdup (ident);
+	if (*ident == '"')
+		return str;
+	gda_sql_identifier_remove_quotes (str);
+	if (gda_sql_identifier_needs_quotes (str)) {
+		gchar *tmp;
+		tmp = gda_sql_identifier_add_quotes (str);
+		g_free (str);
+		return tmp;
+	}
+	else
+		return str;
+}
+
 /**
  * gda_compute_unique_table_row_condition
  * @stsel: a #GdaSqlSelectStatement
@@ -829,6 +859,7 @@ gda_compute_unique_table_row_condition (GdaSqlStatementSelect *stsel, GdaMetaTab
 				GdaSqlOperation *op;
 				GdaSqlExpr *opexpr;
 				GdaSqlParamSpec *pspec;
+				gchar *str;
 
 				/* equal condition */
 				if (and_cond) {
@@ -844,7 +875,9 @@ gda_compute_unique_table_row_condition (GdaSqlStatementSelect *stsel, GdaMetaTab
 				op->operator_type = GDA_SQL_OPERATOR_TYPE_EQ;
 				/* left operand */
 				opexpr = gda_sql_expr_new (GDA_SQL_ANY_PART (op));
-				g_value_set_string (opexpr->value = gda_value_new (G_TYPE_STRING), tcol->column_name);
+				str = add_quotes (tcol->column_name);
+				g_value_take_string (opexpr->value = gda_value_new (G_TYPE_STRING), str);
+
 				op->operands = g_slist_append (op->operands, opexpr);
 
 				/* right operand */
@@ -905,6 +938,8 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
         GdaSqlStatement *sql_dst = NULL;
         GdaSqlStatementDelete *dst = NULL;
 
+	gchar *tmp;
+
 	g_return_val_if_fail (GDA_IS_CONNECTION (cnc), FALSE);
 	g_return_val_if_fail (GDA_IS_STATEMENT (select_stmt), FALSE);
 	g_return_val_if_fail (gda_statement_get_statement_type (select_stmt) == GDA_SQL_STATEMENT_SELECT, FALSE);
@@ -930,14 +965,15 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
 	stsel = (GdaSqlStatementSelect*) sel_struct->contents;
 	target = (GdaSqlSelectTarget*) stsel->from->targets->data;
 	
-	/* actual statement structure's computation */        
+	/* actual statement structure's computation */
+	tmp = add_quotes (target->table_name);
 	if (insert_stmt) {
 		sql_ist = gda_sql_statement_new (GDA_SQL_STATEMENT_INSERT);
 		ist = (GdaSqlStatementInsert*) sql_ist->contents;
 		g_assert (GDA_SQL_ANY_PART (ist)->type == GDA_SQL_ANY_STMT_INSERT);
 
 		ist->table = gda_sql_table_new (GDA_SQL_ANY_PART (ist));
-		ist->table->table_name = g_strdup ((gchar *) target->table_name);
+		ist->table->table_name = g_strdup (tmp);
 	}
 	
 	if (update_stmt) {
@@ -946,7 +982,7 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
 		g_assert (GDA_SQL_ANY_PART (ust)->type == GDA_SQL_ANY_STMT_UPDATE);
 
 		ust->table = gda_sql_table_new (GDA_SQL_ANY_PART (ust));
-		ust->table->table_name = g_strdup ((gchar *) target->table_name);
+		ust->table->table_name = g_strdup (tmp);
 		ust->cond = gda_compute_unique_table_row_condition (stsel, 
 								    GDA_META_TABLE (target->validity_meta_object),
 								    require_pk, error);
@@ -963,7 +999,7 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
 		g_assert (GDA_SQL_ANY_PART (dst)->type == GDA_SQL_ANY_STMT_DELETE);
 
 		dst->table = gda_sql_table_new (GDA_SQL_ANY_PART (dst));
-		dst->table->table_name = g_strdup ((gchar *) target->table_name);
+		dst->table->table_name = g_strdup (tmp);
 		dst->cond = gda_compute_unique_table_row_condition (stsel, 
 								    GDA_META_TABLE (target->validity_meta_object),
 								    require_pk, error);
@@ -973,6 +1009,7 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
 		}
 		GDA_SQL_ANY_PART (dst->cond)->parent = GDA_SQL_ANY_PART (dst);
 	}
+	g_free (tmp);
 
 	GSList *expr_list;
 	gint colindex;
@@ -991,18 +1028,22 @@ gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gbool
 		if (g_hash_table_lookup (fields_hash, selfield->field_name))
 			continue;
 		g_hash_table_insert (fields_hash, selfield->field_name, GINT_TO_POINTER (1));
+
+		gchar *str;
+		str = add_quotes (selfield->field_name);
 		if (insert_stmt) {
 			GdaSqlField *field;
 			field = gda_sql_field_new (GDA_SQL_ANY_PART (ist));
-			field->field_name = g_strdup (selfield->field_name);
+			field->field_name = g_strdup (str);
 			ist->fields_list = g_slist_append (ist->fields_list, field);
 		}
 		if (update_stmt) {
 			GdaSqlField *field;
 			field = gda_sql_field_new (GDA_SQL_ANY_PART (ust));
-			field->field_name = g_strdup (selfield->field_name);
+			field->field_name = g_strdup (str);
 			ust->fields_list = g_slist_append (ust->fields_list, field);
 		}
+		g_free (str);
 
 		/* parameter for the inserted value */
 		GdaSqlExpr *expr;
@@ -1109,7 +1150,8 @@ gda_compute_select_statement_from_update (GdaStatement *update_stmt, GError **er
 	target = gda_sql_select_target_new (GDA_SQL_ANY_PART (sst->from));
 	sst->from->targets = g_slist_prepend (NULL, target);
 	target->expr = gda_sql_expr_new (GDA_SQL_ANY_PART (target));
-	g_value_set_string ((target->expr->value = gda_value_new (G_TYPE_STRING)), ust->table->table_name);
+	g_value_set_string ((target->expr->value = gda_value_new (G_TYPE_STRING)),
+			    ust->table->table_name);
 
 	/* WHERE */
 	sst->where_cond = gda_sql_expr_copy (ust->cond);
@@ -1531,6 +1573,92 @@ gda_sql_identifier_split (const gchar *id)
 		return NULL;
 }
 
+static gboolean _sql_identifier_needs_quotes (const gchar *str);
+
+
+/**
+ * gda_sql_identifier_quote
+ * @id: an SQL identifier
+ * @cnc: a #GdaConnection object, or %NULL
+ * @prov: a #GdaServerProvider object, or %NULL
+ * @meta_store_convention: set to %TRUE if @id respects the #GdaMetaStore
+ *                         representation of SQL identifiers, or if it is a user input
+ * @force_quotes: set to %TRUE to force the returned string to be quoted
+ *
+ * Use this function for any SQL identifier to make sure it is correctly formatted
+ * to be used with @cnc (if @cnc is %NULL, then the standard SQL quoting rules will be applied).
+ *
+ * If @id already has quotes, then this function returns a copy of @id, except that the quotes may be
+ * replaced by database specific characters (such as the backquote for MySQL).
+ *
+ * If @id has no quotes, and if none are requited, then this function returns a copy if @id. The criteria to
+ * determine if @id needs quotes depends on the database provider associated to @cnc, and if @cnc is %NULL, then
+ * in all the following cases quotes are required:
+ * <itemizedlist>
+ *  <listitem><para>If @id's 1st character is a digit</para></listitem>
+ *  <listitem><para>If @id contains other characters than digits, letters and the '_', '$' and '#'</para></listitem>
+ *  <listitem><para>If @id is an SQL reserved keyword</para></listitem>
+ * </itemizedlist>
+ *
+ * If @force_quotes is %TRUE, then the this function always returns a quoted SQL identifier.
+ *
+ * Returns: the possibly quoted representation of @id as a new string, or %NULL if @id is in a wrong format
+ *
+ * Since: 4.0.3
+ */
+gchar *
+gda_sql_identifier_quote (const gchar *id, GdaConnection *cnc, GdaServerProvider *prov,
+			  gboolean meta_store_convention, gboolean force_quotes)
+{
+	g_return_val_if_fail (id && *id, NULL);
+	if (cnc)
+		g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
+	if (prov)
+		g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
+	if (cnc && prov)
+		g_return_val_if_fail (gda_connection_get_provider (cnc) == prov, NULL);
+
+	if (prov && PROV_CLASS (prov)->identifier_quote) {
+		return PROV_CLASS (prov)->identifier_quote (prov, cnc, id,
+							    meta_store_convention, force_quotes);
+	}
+	else {
+		/* default SQL standard */
+		if (*id == '"') {
+			/* there are already some quotes */
+			return g_strdup (id);
+		}
+		if (is_keyword (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+			return gda_sql_identifier_add_quotes (id);
+		
+		/* nothing to do */
+		return g_strdup (id);
+	}
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+	const gchar *ptr;
+
+	g_return_val_if_fail (str, FALSE);
+	for (ptr = str; *ptr; ptr++) {
+		/* quote if 1st char is a number */
+		if ((*ptr <= '9') && (*ptr >= '0')) {
+			if (ptr == str)
+				return TRUE;
+			continue;
+		}
+		if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+		    ((*ptr >= 'a') && (*ptr <= 'z')))
+			continue;
+
+		if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+			return TRUE;
+	}
+	return FALSE;
+}
+
 /*
  *  RFC 1738 defines that these characters should be escaped, as well
  *  any non-US-ASCII character or anything between 0x00 - 0x1F.
diff --git a/libgda/gda-util.h b/libgda/gda-util.h
index 86f8059..b681933 100644
--- a/libgda/gda-util.h
+++ b/libgda/gda-util.h
@@ -1,5 +1,5 @@
 /* GDA common library
- * Copyright (C) 1998 - 2008 The GNOME Foundation.
+ * Copyright (C) 1998 - 2009 The GNOME Foundation.
  *
  * AUTHORS:
  *	Rodrigo Moya <rodrigo gnome-db org>
@@ -48,6 +48,8 @@ guint        gda_identifier_hash (const gchar *id);
 gboolean     gda_identifier_equal (const gchar *id1, const gchar *id2);
 gchar      **gda_completion_list_get (GdaConnection *cnc, const gchar *sql, gint start, gint end);
 gchar      **gda_sql_identifier_split (const gchar *id);
+gchar       *gda_sql_identifier_quote (const gchar *id, GdaConnection *cnc, GdaServerProvider *prov,
+				       gboolean meta_store_convention, gboolean force_quotes);
 
 /*
  * Param & model utilities
diff --git a/libgda/information_schema.xml b/libgda/information_schema.xml
index 21c63a0..5683046 100644
--- a/libgda/information_schema.xml
+++ b/libgda/information_schema.xml
@@ -84,7 +84,7 @@
     <column name="udt_name" pkey="TRUE" descr="Name of the user defined data type for which the column is" ident="TRUE"/>
     <column name="udt_column" pkey="TRUE" descr="Name of the column (part)" ident="TRUE"/>
     <column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
-    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
     <column name="character_octet_length" type="gint" nullok="TRUE"/>
@@ -131,7 +131,7 @@
     <column name="object_schema" descr="Name of the schema that contains the object that uses the array being described" ident="TRUE"/>
     <column name="object_name" descr="Name of the object that uses the array being described" ident="TRUE"/>
     <column name="object_type" descr="The type of the object that uses the array being described TABLE_COL, DOMAIN, UDT_COL, ROUTINE_COL, ROUTINE_PAR"/>
-    <column name="data_type" nullok="TRUE" descr="Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the base data type is an array"/>
     <column name="min_cardinality" type="gint" nullok="TRUE"/>
     <column name="max_cardinality" type="gint" nullok="TRUE"/>
@@ -141,7 +141,7 @@
     <column name="domain_catalog" pkey="TRUE" descr="Name of catalog that contains the domain"/>
     <column name="domain_schema" pkey="TRUE" descr="Name of schema that contains the domain" ident="TRUE"/>
     <column name="domain_name" pkey="TRUE" descr="Name of the domain" ident="TRUE"/>
-    <column name="data_type" nullok="TRUE" descr="Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the domain is an array"/>
     <column name="domain_gtype"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
@@ -319,7 +319,7 @@
     <column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
     <column name="column_default" nullok="TRUE"/>
     <column name="is_nullable" type="boolean"/>
-    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <column name="gtype"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
@@ -500,7 +500,7 @@
     <column name="ordinal_position" type="gint" pkey="TRUE"/>
     <column name="parameter_mode"/>
     <column name="parameter_name" nullok="TRUE" ident="TRUE"/>
-    <column name="data_type" nullok="TRUE" descr="Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL; can also be NULL if any type of parameter is accepted)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL; can also be NULL if any type of parameter is accepted)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the parameter is an array"/>
     <fkey ref_table="_routines">
       <part column="specific_catalog"/>
@@ -523,7 +523,7 @@
     <column name="specific_name" pkey="TRUE"/>
     <column name="column_name" pkey="TRUE" ident="TRUE"/>
     <column name="ordinal_position" type="gint" nullok="TRUE" pkey="TRUE"/>
-    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
     <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <fkey ref_table="_routines">
       <part column="specific_catalog"/>
diff --git a/libgda/libgda.symbols b/libgda/libgda.symbols
index fa84629..909dab8 100644
--- a/libgda/libgda.symbols
+++ b/libgda/libgda.symbols
@@ -576,6 +576,7 @@
 	gda_sql_function_take_name
 	gda_sql_identifier_add_quotes
 	gda_sql_identifier_needs_quotes
+	gda_sql_identifier_quote
 	gda_sql_identifier_remove_quotes
 	gda_sql_identifier_split
 	gda_sqlite_provider_get_type
diff --git a/libgda/sqlite/Makefile.am b/libgda/sqlite/Makefile.am
index fa9ce5f..d64c5d7 100644
--- a/libgda/sqlite/Makefile.am
+++ b/libgda/sqlite/Makefile.am
@@ -23,8 +23,8 @@ AM_CPPFLAGS = \
 mkkeywordhash$(EXEEXT_FOR_BUILD): mkkeywordhash.c
 	$(CC_FOR_BUILD) -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
 
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
-	./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/sqlite/keywords.list
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/sqlite/keywords.list > keywords_hash.c
 
 gen_emb_string$(EXEEXT_FOR_BUILD): gen_emb_string.c
 	$(CC_FOR_BUILD) -o gen_emb_string$(EXEEXT_FOR_BUILD) $<
@@ -52,6 +52,7 @@ libgda_sqlite_la_SOURCES = \
 	gda-sqlite-recordset.c \
 	gda-sqlite-recordset.h \
 	gda-sqlite.h \
+	keywords_hash.h \
 	utils.c
 
 libgda_sqlite_la_LDFLAGS = -export-dynamic -module -avoid-version $(NO_UNDEFINED)
@@ -63,6 +64,6 @@ libgda_sqlite_la_LIBADD = \
 gdaincludedir=$(includedir)/libgda-$(GDA_ABI_MAJOR_VERSION).$(GDA_ABI_MINOR_VERSION)/libgda/sqlite
 gdainclude_HEADERS=$(sqliteheaders)
 
-EXTRA_DIST = gen_emb_string.c keywords.list
+EXTRA_DIST = gen_emb_string.c mkkeywordhash.c keywords.list
 
 CLEANFILES = gen_emb_string$(EXEEXT_FOR_BUILD) xml_embedded.h mkkeywordhash$(EXEEXT_FOR_BUILD) keywords_hash.c
diff --git a/libgda/sqlite/gda-sqlite-meta.c b/libgda/sqlite/gda-sqlite-meta.c
index 6504f94..0c80fda 100644
--- a/libgda/sqlite/gda-sqlite-meta.c
+++ b/libgda/sqlite/gda-sqlite-meta.c
@@ -32,6 +32,8 @@
 #include <libgda/gda-connection-private.h>
 #include <libgda/gda-data-model-array.h>
 #include <libgda/gda-set.h>
+
+#include <libgda/sqlite/keywords_hash.h>
 #include "keywords_hash.c" /* this one is dynamically generated */
 
 static gboolean append_a_row (GdaDataModel *to_model, GError **error, gint nb, ...);
diff --git a/libgda/sqlite/keywords.list b/libgda/sqlite/keywords.list
index 51bdd79..8f56879 100644
--- a/libgda/sqlite/keywords.list
+++ b/libgda/sqlite/keywords.list
@@ -1,3 +1,6 @@
+# SQLite 3.6.16 keywords
+
+
 ABORT,
 ADD,
 AFTER,
diff --git a/libgda/sqlite/keywords_hash.h b/libgda/sqlite/keywords_hash.h
new file mode 100644
index 0000000..091884c
--- /dev/null
+++ b/libgda/sqlite/keywords_hash.h
@@ -0,0 +1,41 @@
+/* 
+ * This code has been copied from SQLite's mkkeywordhash.c file and modified.
+ * to read the SQL keywords from a file instead of static ones.
+ *
+ * Include it along with the generated keywork_hash.c file
+ */
+
+#ifndef __KEYWORDS_HASH_H__
+#define __KEYWORDS_HASH_H__
+
+#include <string.h>
+
+const unsigned char UpperToLower[] = {
+      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
+     18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+     36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+     54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
+    104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
+    122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
+    108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
+    126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+    144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
+    162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
+    180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
+    198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
+    216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
+    234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
+    252,253,254,255
+};
+#define charMap(X) UpperToLower[(unsigned char)X]
+int
+casecmp (const char *zLeft, const char *zRight, int N)
+{
+        register unsigned char *a, *b;
+        a = (unsigned char *)zLeft;
+        b = (unsigned char *)zRight;
+        while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
+        return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
+}
+
+#endif
diff --git a/libgda/sqlite/mkkeywordhash.c b/libgda/sqlite/mkkeywordhash.c
index 94bf8c6..dc6ce89 100644
--- a/libgda/sqlite/mkkeywordhash.c
+++ b/libgda/sqlite/mkkeywordhash.c
@@ -33,32 +33,6 @@ static const char zHdr[] =
 	" * This code has been copied from SQLite's mkkeywordhash.c file and modified.\n"
 	" * to read the SQL keywords from a file instead of static ones\n"
 	" */\n";
-static const char zCode[] = 
-	"static const unsigned char UpperToLower[] = {\n"
-	"      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,\n"
-	"     18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n"
-	"     36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n"
-	"     54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,\n"
-	"    104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,\n"
-	"    122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,\n"
-	"    108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,\n"
-	"    126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,\n"
-	"    144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,\n"
-	"    162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,\n"
-	"    180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,\n"
-	"    198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,\n"
-	"    216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,\n"
-	"    234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,\n"
-	"    252,253,254,255\n"
-	"};\n"
-	"#define charMap(X) UpperToLower[(unsigned char)X]\n"
-	"static int casecmp(const char *zLeft, const char *zRight, int N){\n"
-	"	register unsigned char *a, *b;\n"
-	"	a = (unsigned char *)zLeft;\n"
-	"	b = (unsigned char *)zRight;\n"
-	"	while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }\n"
-	"	return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];\n"
-	"}\n";
 
 /*
 ** All the keywords of the SQL language are stored in a hash
@@ -81,6 +55,7 @@ struct Keyword {
 
 Keyword *aKeywordTable = NULL;
 int nKeyword = 0;
+char *prefix = NULL;
 
 /* An array to map all upper-case characters into their corresponding
 ** lower-case character. 
@@ -142,11 +117,43 @@ static Keyword *findById(int id){
 	return &aKeywordTable[i];
 }
 
+/* @len is the number of chars, NOT including the \0 at the end */
+static void
+add_keywork (const char *keyword, int len)
+{
+#define MAXKEYWORDS 1000
+	const char *ptr;
+
+	if (len == 0)
+		return;
+	for (ptr = keyword; *ptr && (ptr - keyword) < len; ptr++) {
+		if (((*ptr < 'A') || (*ptr > 'Z')) &&
+		    ((*ptr < 'a') || (*ptr > 'z')) &&
+		    ((*ptr < '0') || (*ptr > '9')) &&
+		    (*ptr != '_')) {
+			/* ignore this keyword */
+			return;
+		}
+	}
+
+	aKeywordTable [nKeyword].zName = malloc (sizeof (char) * (len + 1));
+	memcpy (aKeywordTable [nKeyword].zName, keyword, sizeof (char) * len);
+	aKeywordTable [nKeyword].zName [len] = 0;
+	
+	printf (" * KEYWORD: '%s'\n", aKeywordTable [nKeyword].zName);
+	
+	nKeyword ++;
+	if (nKeyword > MAXKEYWORDS) {
+		fprintf (stderr, "Maximum number of SQL keywords exceeded, "
+			 "change the MAXKEYWORDS constant and recompile\n");
+		exit (1);
+	}
+}
+
 static void
 parse_input (const char *filename)
 {
 #define BUFSIZE 500
-#define MAXKEYWORDS 1000
 	FILE *stream;
         char buffer[BUFSIZE];
         int read;
@@ -176,50 +183,22 @@ parse_input (const char *filename)
                         *ptr = 0;
                         
                         /* treat the line */
-			char *tmp1, *tmp2;
-			printf (" *\n * From line: %s\n", buffer);
-			for (tmp1 = tmp2 = buffer; *tmp2; tmp2++) {
-				if (((*tmp2 < 'A') || (*tmp2 > 'Z')) &&
-				    ((*tmp2 < 'a') || (*tmp2 > 'z')) &&
-				    ((*tmp2 < '0') || (*tmp2 > '9')) &&
-				    (*tmp2 != '_')) {
-					/* keyword found */
-					int len;
-
-					len = tmp2 - tmp1 + 1;
-					
-					aKeywordTable [nKeyword].zName = malloc (sizeof (char) * len);
-					memcpy (aKeywordTable [nKeyword].zName, tmp1, sizeof (char) * (len - 1));
-					aKeywordTable [nKeyword].zName [len - 1] = 0;
-
-					tmp1 = tmp2 + 1;
-
-					printf (" * KEYWORD: %s\n", aKeywordTable [nKeyword].zName);
-
-					nKeyword ++;
-					if (nKeyword > MAXKEYWORDS) {
-						fprintf (stderr, "Maximum number of SQL keywords exceeded, "
-							 "change the MAXKEYWORDS constant and recompile\n");
-						aKeywordTable = NULL; /* we don't care about mem leaks here */
-						return;
+			if (*buffer && *buffer != '#') {
+				char *tmp1, *tmp2;
+				printf (" *\n * From line: %s\n", buffer);
+				for (tmp1 = tmp2 = buffer; *tmp2; tmp2++) {
+					if (((*tmp2 < 'A') || (*tmp2 > 'Z')) &&
+					    ((*tmp2 < 'a') || (*tmp2 > 'z')) &&
+					    ((*tmp2 < '0') || (*tmp2 > '9')) &&
+					    (*tmp2 != '_')) {
+						/* keyword found */
+						add_keywork (tmp1, tmp2 - tmp1);
+						
+						tmp1 = tmp2 + 1;
 					}
 				}
-			}
-			if ((tmp1 != tmp2) && *tmp1) {
-				int len;
-				len = tmp2 - tmp1 + 2;
-				aKeywordTable [nKeyword].zName = malloc (sizeof (char) * len);
-				memcpy (aKeywordTable [nKeyword].zName, tmp1, sizeof (char) * (len - 1));
-				aKeywordTable [nKeyword].zName [len - 1] = 0;
-				printf (" * KEYWORD: %s\n", aKeywordTable [nKeyword].zName);
-
-				nKeyword ++;
-				if (nKeyword > MAXKEYWORDS) {
-					fprintf (stderr, "Maximum number of SQL keywords exceeded, "
-						 "change the MAXKEYWORDS constant and recompile\n");
-					aKeywordTable = NULL; /* we don't care about mem leaks here */
-					return;
-				}
+				if ((tmp1 != tmp2) && *tmp1)
+					add_keywork (tmp1, tmp2 - tmp1);
 			}
                                 
                         if (hold) {
@@ -239,7 +218,7 @@ parse_input (const char *filename)
 
 #ifdef TEST_RESERVED_WORDS
 	int i;
-	printf ("static char *keywords[] = {\n");
+	printf ("static char *%skeywords[] = {\n", prefix ? prefix : "");
 	for (i = 0; i < nKeyword; i++)
 		printf ("\t\"%s\",\n", aKeywordTable [i].zName);
 	printf ("};\n");
@@ -263,10 +242,12 @@ main (int argc, char **argv)
 	int aHash[5000];  /* 2000 is much bigger than nKeyword */
 	char zText[10000];
 
-	if (argc != 2) {
-		printf ("Usage: %s <file with SQL keywords>\n", argv[0]);
+	if ((argc < 2)  || (argc > 3)) {
+		printf ("Usage: %s <file with SQL keywords> [<prefix>]\n", argv[0]);
 		return 1;
 	}
+	if (argc == 3)
+		prefix = argv[2];
 
 	printf("%s", zHdr);
 	parse_input (argv[1]);
@@ -389,9 +370,8 @@ main (int argc, char **argv)
 	}
 
 	/* Begin generating code */
-	printf("%s\n", zCode);
 	printf("/* Hash score: %d */\n", bestCount);
-	printf("static int keywordCode(const char *z, int n){\n");
+	printf("static int %skeywordCode(const char *z, int n){\n", prefix ? prefix : "");
 	printf("  /* zText[] encodes %d bytes of keywords in %d bytes */\n",
 	       totalLen + nKeyword, nChar+1 );
 	for(i=j=k=0; i<nKeyword; i++){
@@ -413,7 +393,7 @@ main (int argc, char **argv)
 	if( j>0 ){
 		printf("%*s */\n", 74-j, "");
 	}
-	printf("  static const char zText[%d] = {\n", nChar);
+	printf("  static const char %szText[%d] = {\n", prefix ? prefix : "", nChar);
 	zText[nChar] = 0;
 	for(i=j=0; i<k; i++){
 		if( j==0 ){
@@ -433,7 +413,7 @@ main (int argc, char **argv)
 	if( j>0 ) printf("\n");
 	printf("  };\n");
 
-	printf("  static const unsigned int aHash[%d] = {\n", bestSize);
+	printf("  static const unsigned int %saHash[%d] = {\n", prefix ? prefix : "", bestSize);
 	for(i=j=0; i<bestSize; i++){
 		if( j==0 ) printf("    ");
 		printf(" %d,", aHash[i]);
@@ -445,7 +425,7 @@ main (int argc, char **argv)
 	}
 	printf("%s  };\n", j==0 ? "" : "\n");    
 
-	printf("  static const unsigned int aNext[%d] = {\n", nKeyword);
+	printf("  static const unsigned int %saNext[%d] = {\n", prefix ? prefix : "", nKeyword);
 	for(i=j=0; i<nKeyword; i++){
 		if( j==0 ) printf("    ");
 		printf(" %3d,", aKeywordTable[i].iNext);
@@ -457,7 +437,7 @@ main (int argc, char **argv)
 	}
 	printf("%s  };\n", j==0 ? "" : "\n");    
 
-	printf("  static const unsigned char aLen[%d] = {\n", nKeyword);
+	printf("  static const unsigned char %saLen[%d] = {\n", prefix ? prefix : "", nKeyword);
 	for(i=j=0; i<nKeyword; i++){
 		if( j==0 ) printf("    ");
 		printf(" %3d,", aKeywordTable[i].len+aKeywordTable[i].prefix);
@@ -469,7 +449,7 @@ main (int argc, char **argv)
 	}
 	printf("%s  };\n", j==0 ? "" : "\n");    
 
-	printf("  static const unsigned short int aOffset[%d] = {\n", nKeyword);
+	printf("  static const unsigned short int %saOffset[%d] = {\n", prefix ? prefix : "", nKeyword);
 	for(i=j=0; i<nKeyword; i++){
 		if( j==0 ) printf("    ");
 		printf(" %3d,", aKeywordTable[i].offset);
@@ -487,26 +467,30 @@ main (int argc, char **argv)
 	printf("  h = ((charMap(z[0])*4) ^\n"
 	       "      (charMap(z[n-1])*3) ^\n"
 	       "      n) %% %d;\n", bestSize);
-	printf("  for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){\n");
-	printf("    if( aLen[i]==n &&"
-	       " casecmp(&zText[aOffset[i]],z,n)==0 ){\n");
+	printf("  for(i=((int)%saHash[h])-1; i>=0; i=((int)%saNext[i])-1){\n",
+	       prefix ? prefix : "", prefix ? prefix : "");
+	printf("    if( %saLen[i]==n &&"
+	       " casecmp(&%szText[%saOffset[i]],z,n)==0 ){\n",
+	       prefix ? prefix : "",
+	       prefix ? prefix : "",
+	       prefix ? prefix : "");
 	printf("      return 1;\n");
 	printf("    }\n");
 	printf("  }\n");
 	printf("  return 0;\n");
 	printf("}\n");
-	printf("\nstatic gboolean\nis_keyword (const char *z)\n{\n");
-	printf("\treturn keywordCode(z, strlen (z));\n");
-	printf("}\n");
+	printf("\nstatic gboolean\n%sis_keyword (const char *z)\n{\n", prefix ? prefix : "");
+	printf("\treturn %skeywordCode(z, strlen (z));\n", prefix ? prefix : "");
+	printf("}\n\n");
 
 #ifdef TEST_RESERVED_WORDS
-	printf("\nstatic void\ntest_keywords (void)\n{\n");
+	printf("\nstatic void\n%stest_keywords (void)\n{\n", prefix ? prefix : "");
 	printf("\tint i;\n");
 	printf("\tfor (i = 0; i < %d; i++) {\n", nKeyword);
-	printf("\t\tif (! is_keyword (keywords[i]))\n");
-	printf("\t\t\tprintf (\"KEYWORK %%s ignored!\\n\", keywords[i]);\n");
+	printf("\t\tif (! %sis_keyword (%skeywords[i]))\n", prefix ? prefix : "", prefix ? prefix : "");
+	printf("\t\t\tprintf (\"KEYWORK %%s ignored!\\n\", %skeywords[i]);\n", prefix ? prefix : "");
 	printf("\t}\n");
-	printf("}\n");
+	printf("}\n\n");
 #endif
 
 
diff --git a/providers/mysql/Makefile.am b/providers/mysql/Makefile.am
index 380de40..240f4d3 100644
--- a/providers/mysql/Makefile.am
+++ b/providers/mysql/Makefile.am
@@ -10,6 +10,18 @@ AM_CPPFLAGS = \
 	-I$(top_builddir) \
 	$(LIBGDA_CFLAGS) $(MYSQL_CFLAGS) 
 
+mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
+	$(CC_FOR_BUILD) -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
+
+keyword_files=keywords_V50.list keywords_V51.list keywords_V54.list keywords_V60.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/mysql/,$(keyword_files))
+
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V50.list V50 > keywords_hash.c
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V51.list V51 >> keywords_hash.c
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V54.list V54 >> keywords_hash.c
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V60.list V60 >> keywords_hash.c
+
 # parser generation
 parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
 	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
@@ -20,7 +32,7 @@ gen_def$(EXEEXT_FOR_BUILD): gen_def.c
 mysql_token_types.h: gen_def$(EXEEXT_FOR_BUILD) parser.h
 	./gen_def$(EXEEXT_FOR_BUILD) > mysql_token_types.h
 
-$(OBJECTS) $(libgda_mysql_la_OBJECTS): mysql_token_types.h
+$(OBJECTS) $(libgda_mysql_la_OBJECTS): mysql_token_types.h keywords_hash.c
 
 libgda_mysql_la_SOURCES = \
 	gda-mysql-blob-op.c \
@@ -72,7 +84,8 @@ xml_DATA = $(xml_in_files:.xml.in=.xml)
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libgda-mysql-4.0.pc
 
-EXTRA_DIST = $(xml_in_files) libgda-mysql-4.0.pc.in parser.y gen_def.c
+EXTRA_DIST = $(xml_in_files) libgda-mysql-4.0.pc.in parser.y gen_def.c $(keyword_files)
 DISTCLEANFILES = $(xml_DATA)
 
-CLEANFILES = parser.h parser.c parser.out mysql_token_types.h gen_def$(EXEEXT_FOR_BUILD)
+CLEANFILES = parser.h parser.c parser.out mysql_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
+	mkkeywordhash$(EXEEXT_FOR_BUILD) keywords_hash.c
diff --git a/providers/mysql/gda-mysql-meta.c b/providers/mysql/gda-mysql-meta.c
index 8a5bfe9..9f6b823 100644
--- a/providers/mysql/gda-mysql-meta.c
+++ b/providers/mysql/gda-mysql-meta.c
@@ -23,6 +23,7 @@
 #include <string.h>
 #include "gda-mysql.h"
 #include "gda-mysql-meta.h"
+#include "gda-mysql-util.h"
 #include "gda-mysql-provider.h"
 #include <libgda/gda-meta-store.h>
 #include <libgda/sql-parser/gda-sql-parser.h>
@@ -250,6 +251,10 @@ _gda_mysql_provider_meta_init (GdaServerProvider  *provider)
                                     "name2", G_TYPE_STRING, "");
 
 	g_static_mutex_unlock (&init_mutex);
+
+#ifdef GDA_DEBUG
+	_gda_mysql_test_keywords ();
+#endif
 }
 
 gboolean
@@ -261,10 +266,16 @@ _gda_mysql_meta__info (GdaServerProvider  *prov,
 {
 	GdaDataModel *model;
         gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
         model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CATALOG], NULL, error);
         if (model == NULL)
                 retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -321,6 +332,10 @@ _gda_mysql_meta__btypes (GdaServerProvider  *prov,
 	};
         GdaDataModel *model;
         gboolean retval = TRUE;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_meta_store_create_modify_data_model (store, context->table_name);
         if (model == NULL)
@@ -362,8 +377,10 @@ _gda_mysql_meta__btypes (GdaServerProvider  *prov,
 			g_list_free (values);
 		}
 
-		if (retval)
+		if (retval) {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
+		}
 		g_object_unref (G_OBJECT(model));
 	}
 
@@ -427,7 +444,6 @@ _gda_mysql_meta__enums (GdaServerProvider  *prov,
 			GdaMetaContext     *context,
 			GError            **error)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;	
 }
@@ -442,7 +458,6 @@ _gda_mysql_meta_enums (GdaServerProvider  *prov,
 		       const GValue       *udt_schema,
 		       const GValue       *udt_name)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -455,7 +470,6 @@ _gda_mysql_meta__domains (GdaServerProvider  *prov,
 			  GdaMetaContext     *context,
 			  GError            **error)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -469,7 +483,6 @@ _gda_mysql_meta_domains (GdaServerProvider  *prov,
 			 const GValue       *domain_catalog,
 			 const GValue       *domain_schema)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -481,7 +494,6 @@ _gda_mysql_meta__constraints_dom (GdaServerProvider  *prov,
 				  GdaMetaContext     *context,
 				  GError            **error)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -496,7 +508,6 @@ _gda_mysql_meta_constraints_dom (GdaServerProvider  *prov,
 				 const GValue       *domain_schema, 
 				 const GValue       *domain_name)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -508,7 +519,6 @@ _gda_mysql_meta__el_types (GdaServerProvider  *prov,
 			   GdaMetaContext     *context,
 			   GError            **error)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -521,7 +531,6 @@ _gda_mysql_meta_el_types (GdaServerProvider  *prov,
 			  GError            **error,
 			  const GValue       *specific_name)
 {
-        //TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
         return TRUE;
 }
@@ -533,7 +542,6 @@ _gda_mysql_meta__collations (GdaServerProvider  *prov,
 			     GdaMetaContext     *context,
 			     GError            **error)
 {
-	//TO_IMPLEMENT;
 	/* Feature not supported by MySQL. */
 	return TRUE;
 }
@@ -559,14 +567,18 @@ _gda_mysql_meta__character_sets (GdaServerProvider  *prov,
 				 GdaMetaContext     *context,
 				 GError            **error)
 {
-	//TO_IMPLEMENT;
-
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
 	model = gda_connection_statement_execute_select	(cnc, internal_stmt[I_STMT_CHARACTER_SETS_ALL], NULL, error);
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -584,10 +596,12 @@ _gda_mysql_meta_character_sets (GdaServerProvider  *prov,
 				const GValue       *chset_schema, 
 				const GValue       *chset_name_n)
 {
-	//TO_IMPLEMENT;
-
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), chset_catalog, error))
 		return FALSE;
@@ -599,6 +613,7 @@ _gda_mysql_meta_character_sets (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 
@@ -614,19 +629,23 @@ _gda_mysql_meta__schemata (GdaServerProvider  *prov,
 			   GdaMetaContext     *context,
 			   GError            **error)
 {
-	// TO_IMPLEMENT;
-
 	GType col_types[] = {
 		0, 0, 0,
 		G_TYPE_BOOLEAN, G_TYPE_NONE
 	};
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
 	model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_SCHEMAS_ALL], NULL,
 							      GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -643,14 +662,16 @@ _gda_mysql_meta_schemata (GdaServerProvider  *prov,
 			  const GValue       *catalog_name,
 			  const GValue       *schema_name_n)
 {
-	// TO_IMPLEMENT;
-	
 	GType col_types[] = {
 		0, 0, 0,
 		G_TYPE_BOOLEAN, G_TYPE_NONE
 	};
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), catalog_name, error))
 		return FALSE;
@@ -660,6 +681,7 @@ _gda_mysql_meta_schemata (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
 			g_object_unref (G_OBJECT(model));
 		}
@@ -671,6 +693,7 @@ _gda_mysql_meta_schemata (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model,
 							"schema_name=##name::string",
 							error,
@@ -719,6 +742,7 @@ _gda_mysql_meta__tables_views (GdaServerProvider  *prov,
 		retval = FALSE;
 	else {
 		copy.table_name = "_tables";
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &copy, model_tables, error);
 		g_object_unref (G_OBJECT(model_tables));
 	}
@@ -729,6 +753,7 @@ _gda_mysql_meta__tables_views (GdaServerProvider  *prov,
 		retval = FALSE;
 	else {
 		copy.table_name = "_views";
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &copy, model_views, error);
 		g_object_unref (G_OBJECT(model_views));
 	}
@@ -746,8 +771,6 @@ _gda_mysql_meta_tables_views (GdaServerProvider  *prov,
 			      const GValue       *table_schema, 
 			      const GValue       *table_name_n)
 {
-	// TO_IMPLEMENT;
-	
 	GType col_types_tables[] = {
 		0, 0, 0, 0,
 		G_TYPE_BOOLEAN, G_TYPE_NONE
@@ -784,6 +807,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider  *prov,
 		if (model_tables == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, &copy, model_tables, NULL);
 			g_object_unref (G_OBJECT(model_tables));
 		}
@@ -794,6 +818,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider  *prov,
 		if (model_views == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, &copy, model_views, NULL);
 			g_object_unref (G_OBJECT(model_views));
 		}
@@ -808,6 +833,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider  *prov,
 			retval = FALSE;
 		else {
 			copy.table_name = "_tables";
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, &copy, model_tables, error);
 			g_object_unref (G_OBJECT(model_tables));
 		}
@@ -819,6 +845,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider  *prov,
 			retval = FALSE;
 		else {
 			copy.table_name = "_views";
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, &copy, model_views, error);
 			g_object_unref (G_OBJECT(model_views));
 		}
@@ -961,8 +988,6 @@ _gda_mysql_meta__columns (GdaServerProvider  *prov,
 			  GdaMetaContext     *context,
 			  GError            **error)
 {
-	// TO_IMPLEMENT;
-
 	GType col_types[] = {
 		0, 0, 0, 0, G_TYPE_INT, G_TYPE_STRING,
 		G_TYPE_BOOLEAN,
@@ -1008,8 +1033,10 @@ _gda_mysql_meta__columns (GdaServerProvider  *prov,
 				break;
 		}
 
-		if (retval)
+		if (retval) {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, context, proxy/* model */, error);
+		}
 
 		g_object_unref (G_OBJECT(proxy));
 		g_object_unref (G_OBJECT(model));
@@ -1028,8 +1055,6 @@ _gda_mysql_meta_columns (GdaServerProvider  *prov,
 			 const GValue       *table_schema, 
 			 const GValue       *table_name)
 {
-	// TO_IMPLEMENT;
-
 	GType col_types[] = {
 		0, 0, 0, 0, G_TYPE_INT, G_TYPE_STRING,
 		G_TYPE_BOOLEAN,
@@ -1081,11 +1106,13 @@ _gda_mysql_meta_columns (GdaServerProvider  *prov,
 				break;
 		}
 
-		if (retval)
+		if (retval) {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, proxy,
 							"table_schema=##schema::string AND table_name=##name::string",
 							error,
 							"schema", table_schema, "name", table_name, NULL);
+		}
 		g_object_unref (G_OBJECT(proxy));
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1100,8 +1127,6 @@ _gda_mysql_meta__view_cols (GdaServerProvider  *prov,
 			    GdaMetaContext     *context,
 			    GError            **error)
 {
-	// TO_IMPLEMENT;
-
 	GdaDataModel *model;
 	gboolean retval;
 	/* Check correct mysql server version. */
@@ -1119,6 +1144,7 @@ _gda_mysql_meta__view_cols (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1136,9 +1162,12 @@ _gda_mysql_meta_view_cols (GdaServerProvider  *prov,
 			   const GValue       *view_schema, 
 			   const GValue       *view_name)
 {
-	// TO_IMPLEMENT;
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), view_catalog, error))
 		return FALSE;
@@ -1150,6 +1179,7 @@ _gda_mysql_meta_view_cols (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 
@@ -1165,19 +1195,23 @@ _gda_mysql_meta__constraints_tab (GdaServerProvider  *prov,
 				  GdaMetaContext     *context,
 				  GError            **error)
 {
-	// TO_IMPLEMENT;
-
 	GType col_types[] = {
 		0, 0, 0, 0, 0, 0, 0, 0,
 		G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_NONE
 	};
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
 	model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS_ALL], NULL,
 							      GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1196,10 +1230,12 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider  *prov,
 				 const GValue       *table_name,
 				 const GValue       *constraint_name_n)
 {
-	// TO_IMPLEMENT;
-	
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
 		return FALSE;
@@ -1212,6 +1248,7 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model,
 							"table_schema = ##schema::string AND table_name = ##name::string",
 							error,
@@ -1225,6 +1262,7 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model,
 							"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
 							error,
@@ -1255,6 +1293,7 @@ _gda_mysql_meta__constraints_ref (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify_with_context (store, context, model, error);
 			g_object_unref (G_OBJECT(model));
 		}
@@ -1300,6 +1339,7 @@ _gda_mysql_meta_constraints_ref (GdaServerProvider  *prov,
 		if (model == NULL)
 			retval = FALSE;
 		else {
+			gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model,
 							"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
 							error,
@@ -1323,19 +1363,23 @@ _gda_mysql_meta__key_columns (GdaServerProvider  *prov,
 			      GdaMetaContext     *context,
 			      GError            **error)
 {
-	// TO_IMPLEMENT;
-
 	GType col_types[] = {
 		0, 0, 0, 0, 0,
 		G_TYPE_INT, G_TYPE_NONE
 	};
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
 	model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_KEY_COLUMN_USAGE_ALL], NULL,
 							      GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1354,8 +1398,6 @@ _gda_mysql_meta_key_columns (GdaServerProvider  *prov,
 			     const GValue       *table_name,
 			     const GValue       *constraint_name)
 {
-	// TO_IMPLEMENT;
-
 	GdaDataModel *model;
 	gboolean retval;
 	/* Check correct mysql server version. */
@@ -1382,6 +1424,7 @@ _gda_mysql_meta_key_columns (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model,
 						"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
 						error,
@@ -1445,6 +1488,7 @@ _gda_mysql_meta__triggers (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1487,6 +1531,7 @@ _gda_mysql_meta_triggers (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 
@@ -1506,10 +1551,16 @@ _gda_mysql_meta__routines (GdaServerProvider  *prov,
 
 	GdaDataModel *model;
 	gboolean retval;
+	MysqlConnectionData *cdata;
+	cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_ROUTINES_ALL], NULL, error);
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 	}
@@ -1556,6 +1607,7 @@ _gda_mysql_meta_routines (GdaServerProvider  *prov,
 	if (model == NULL)
 		retval = FALSE;
 	else {
+		gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, model, error);
 		g_object_unref (G_OBJECT(model));
 
diff --git a/providers/mysql/gda-mysql-provider.c b/providers/mysql/gda-mysql-provider.c
index 2b53089..e966491 100644
--- a/providers/mysql/gda-mysql-provider.c
+++ b/providers/mysql/gda-mysql-provider.c
@@ -159,6 +159,10 @@ static GObject             *gda_mysql_provider_statement_execute (GdaServerProvi
 								  gpointer                         cb_data,
 								  GError                         **error);
 
+/* Quoting */
+static gchar               *gda_mysql_identifier_quote    (GdaServerProvider *provider, GdaConnection *cnc,
+							   const gchar *id,
+							   gboolean meta_store_convention, gboolean force_quotes);
 
 /* distributed transactions */
 static gboolean gda_mysql_provider_xa_start    (GdaServerProvider         *provider,
@@ -253,6 +257,8 @@ gda_mysql_provider_class_init (GdaMysqlProviderClass  *klass)
 	provider_class->cancel = NULL;
 	provider_class->create_connection = NULL;
 
+	provider_class->identifier_quote = gda_mysql_identifier_quote;
+
 	memset (&(provider_class->meta_funcs), 0, sizeof (GdaServerProviderMeta));
 	provider_class->meta_funcs._info = _gda_mysql_meta__info;
         provider_class->meta_funcs._btypes = _gda_mysql_meta__btypes;
@@ -471,6 +477,17 @@ get_mysql_version (MYSQL  *mysql)
 				(version_long%100));
 }
 
+static gchar *
+get_mysql_short_version (MYSQL  *mysql)
+{
+	g_return_val_if_fail (mysql != NULL, NULL);
+	unsigned long version_long;
+	version_long = mysql_get_server_version (mysql);
+	return g_strdup_printf ("%lu%lu",
+				version_long/10000,
+				(version_long%10000)/100);
+}
+
 
 /* 
  * Open connection request
@@ -601,6 +618,7 @@ gda_mysql_provider_open_connection (GdaServerProvider               *provider,
 
 	cdata->version_long = mysql_get_server_version (mysql);
 	cdata->version = get_mysql_version (mysql);
+	cdata->short_version = get_mysql_short_version (mysql);
 	cdata->tables_case_sensitive = case_sensitive;
 
 	return TRUE;
@@ -1218,13 +1236,55 @@ mysql_render_table (GdaSqlTable *table, GdaSqlRenderingContext *context, GError
 	GString *string;
 	string = g_string_new ("");
 	for (i = 0; ids_array [i]; i++) {
-		if (*(ids_array [i]) == '"')
-			gda_sql_identifier_remove_quotes (ids_array [i]);
+		if (*(ids_array [i]) == '"') {
+			gchar *ptr;
+			for (ptr = ids_array [i]; *ptr; ptr++) {
+				if (*ptr == '"')
+					*ptr = '`';
+			}
+		}
+		if (i != 0)
+			g_string_append_c (string, '.');
+		g_string_append (string, ids_array [i]);
+	}
+	g_strfreev (ids_array);
+	return g_string_free (string, FALSE);
+}
+
+static gchar *
+mysql_render_field (GdaSqlField *field, GdaSqlRenderingContext *context, GError **error)
+{
+	g_return_val_if_fail (field, NULL);
+        g_return_val_if_fail (GDA_SQL_ANY_PART (field)->type == GDA_SQL_ANY_SQL_FIELD, NULL);
+
+        /* can't have: field->field_name not a valid SQL identifier */
+        if (!gda_sql_any_part_check_structure (GDA_SQL_ANY_PART (field), error)) return NULL;
+
+	gchar **ids_array;
+	ids_array = gda_sql_identifier_split (field->field_name);
+	if (!ids_array) {
+		g_set_error (error, GDA_SQL_ERROR, GDA_SQL_STRUCTURE_CONTENTS_ERROR,
+			     "%s", _("Malformed field name"));
+		return NULL;
+	}
+	
+	gint i;
+	GString *string;
+	string = g_string_new ("");
+	for (i = 0; ids_array [i]; i++) {
+		if (*(ids_array [i]) == '"') {
+			gchar *ptr;
+			for (ptr = ids_array [i]; *ptr; ptr++) {
+				if (*ptr == '"')
+					*ptr = '`';
+			}
+		}
 		if (i != 0)
 			g_string_append_c (string, '.');
 		g_string_append (string, ids_array [i]);
 	}
 	g_strfreev (ids_array);
+	g_print ("%s ==> %s\n", field->field_name, string->str);
 	return g_string_free (string, FALSE);
 }
 
@@ -1256,7 +1316,7 @@ gda_mysql_provider_statement_to_sql (GdaServerProvider    *provider,
         memset (&context, 0, sizeof (context));
         context.params = params;
         context.flags = flags;
-	/* remove double quotes around table name */
+	/* replace double quotes around table name with backquotes */
 	context.render_select_target = (GdaSqlRenderingFunc) mysql_render_select_target; 
 	context.render_table = (GdaSqlRenderingFunc) mysql_render_table; 
 
@@ -1311,6 +1371,7 @@ real_prepare (GdaServerProvider *provider, GdaConnection *cnc, GdaStatement *stm
 		return FALSE;
 	}
 
+	g_print ("PREPARE: %s\n", sql);
 	if (mysql_stmt_prepare (mysql_stmt, sql, strlen (sql))) {
 		_gda_mysql_make_error (cdata->cnc, NULL, mysql_stmt, error);
 		mysql_stmt_close (mysql_stmt);
@@ -1983,6 +2044,108 @@ gda_mysql_provider_xa_recover (GdaServerProvider  *provider,
 	return NULL;
 }
 
+static gchar *
+identifier_add_quotes (const gchar *str)
+{
+        gchar *retval, *rptr;
+        const gchar *sptr;
+        gint len;
+
+        if (!str)
+                return NULL;
+
+        len = strlen (str);
+        retval = g_new (gchar, 2*len + 3);
+        *retval = '`';
+        for (rptr = retval+1, sptr = str; *sptr; sptr++, rptr++) {
+                if (*sptr == '`') {
+                        *rptr = '\\';
+                        rptr++;
+                        *rptr = *sptr;
+                }
+                else
+                        *rptr = *sptr;
+        }
+        *rptr = '`';
+        rptr++;
+        *rptr = 0;
+        return retval;
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+	const gchar *ptr;
+
+	g_return_val_if_fail (str, FALSE);
+	for (ptr = str; *ptr; ptr++) {
+		/* quote if 1st char is a number */
+		if ((*ptr <= '9') && (*ptr >= '0')) {
+			if (ptr == str)
+				return TRUE;
+			continue;
+		}
+		if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+		    ((*ptr >= 'a') && (*ptr <= 'z')))
+			continue;
+
+		if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+			return TRUE;
+	}
+	return FALSE;
+}
+
+static gchar *
+gda_mysql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+			    const gchar *id,
+			    gboolean meta_store_convention, gboolean force_quotes)
+{
+	GdaSqlReservedKeywordsFunc kwfunc;
+	MysqlConnectionData *cdata = NULL;
+
+	if (cnc) {
+		cdata = (MysqlConnectionData*) gda_connection_internal_get_provider_data (cnc);
+		if (!cdata) 
+			return NULL;
+	}
+
+	kwfunc = _gda_mysql_get_reserved_keyword_func (cdata);
+	if (meta_store_convention) {
+		/* @id can either:
+		 * - be enquoted between double quotes
+		 * - not enquoted and in lower case
+		 */
+		if (*id == '"') {
+			/* must be quoted, replace '"' with '`' */
+			gchar *ptr, *retval;
+			retval = g_strdup (id);
+			*retval = '`';
+			for (ptr = retval + 1; *ptr; ptr++) {
+				if (*ptr == '"')
+					*ptr = '`';
+			}
+			return retval;
+		}
+		
+		if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+			return identifier_add_quotes (id);
+
+		/* nothing to do */
+		return g_strdup (id);
+	}
+	else {
+		if (*id == '`') {
+			/* there are already some quotes */
+			return g_strdup (id);
+		}
+		if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+			return identifier_add_quotes (id);
+		
+		/* nothing to do */
+		return g_strdup (id);
+	}
+}
+
 /*
  * Free connection's specific data
  */
@@ -1998,7 +2161,7 @@ gda_mysql_free_cnc_data (MysqlConnectionData  *cdata)
 	}
 
 	g_free (cdata->version);
-	cdata->version_long = -1;
+	g_free (cdata->short_version);
 	
 	g_free (cdata);
 }
diff --git a/providers/mysql/gda-mysql-recordset.c b/providers/mysql/gda-mysql-recordset.c
index 7ece9f5..222bef2 100644
--- a/providers/mysql/gda-mysql-recordset.c
+++ b/providers/mysql/gda-mysql-recordset.c
@@ -523,6 +523,7 @@ gda_mysql_recordset_new (GdaConnection            *cnc,
 
 	/* create data model */
         model = g_object_new (GDA_TYPE_MYSQL_RECORDSET,
+			      "connection", cnc,
 			      "prepared-stmt", ps,
 			      "model-usage", rflags,
 			      "exec-params", exec_params, 
diff --git a/providers/mysql/gda-mysql-util.c b/providers/mysql/gda-mysql-util.c
index 98ad113..62fbb39 100644
--- a/providers/mysql/gda-mysql-util.c
+++ b/providers/mysql/gda-mysql-util.c
@@ -25,6 +25,9 @@
 #include <glib/gi18n-lib.h>
 #include "gda-mysql-util.h"
 
+#include <libgda/sqlite/keywords_hash.h>
+#include "keywords_hash.c" /* this one is dynamically generated */
+
 /*
  * Create a new #GdaConnectionEvent object and "adds" it to @cnc
  *
@@ -78,3 +81,34 @@ _gda_mysql_make_error (GdaConnection  *cnc,
 
 	return event_error;
 }
+
+#ifdef GDA_DEBUG
+void
+_gda_mysql_test_keywords (void)
+{
+	V50test_keywords();
+	V51test_keywords();
+	V54test_keywords();
+	V60test_keywords();
+}
+#endif
+
+GdaSqlReservedKeywordsFunc
+_gda_mysql_get_reserved_keyword_func (MysqlConnectionData *cdata)
+{
+	if (cdata && cdata->short_version) {
+		switch (*cdata->short_version) {
+		case '5':
+			if (cdata->short_version[1] == '1')
+				return V51is_keyword;
+			if (cdata->short_version[1] == '0')
+				return V50is_keyword;
+			return V54is_keyword;
+		case '6':
+		default:
+			return V60is_keyword;
+		break;
+		}
+	}
+	return V60is_keyword;
+}
diff --git a/providers/mysql/gda-mysql-util.h b/providers/mysql/gda-mysql-util.h
index a2104ac..250fa4b 100644
--- a/providers/mysql/gda-mysql-util.h
+++ b/providers/mysql/gda-mysql-util.h
@@ -28,22 +28,15 @@
 
 G_BEGIN_DECLS
 
-GdaConnectionEvent *
-_gda_mysql_make_error               (GdaConnection  *cnc,
-				     MYSQL          *mysql,
-				     MYSQL_STMT     *mysql_stmt,
-				     GError        **error);
-/* int */
-/* _gda_mysql_real_query_wrap          (GdaConnection  *cnc, */
-/* 				     MYSQL          *mysql, */
-/* 				     const char     *query, */
-/* 				     unsigned long   length); */
-/* int */
-/* _gda_mysql_get_connection_type_list (GdaConnection        *cnc, */
-/* 				     MysqlConnectionData  *cdata); */
-/* GType */
-/* _gda_mysql_type_oid_to_gda          (MysqlConnectionData    *cdata, */
-/* 				     enum enum_field_types   mysql_type); */
+GdaConnectionEvent          * _gda_mysql_make_error (GdaConnection  *cnc,
+						     MYSQL          *mysql,
+						     MYSQL_STMT     *mysql_stmt,
+						     GError        **error);
+#ifdef GDA_DEBUG
+void                          _gda_mysql_test_keywords (void);
+#endif
+GdaSqlReservedKeywordsFunc    _gda_mysql_get_reserved_keyword_func (MysqlConnectionData *cdata);
+
 
 G_END_DECLS
 
diff --git a/providers/mysql/gda-mysql.h b/providers/mysql/gda-mysql.h
index f221b5f..c601771 100644
--- a/providers/mysql/gda-mysql.h
+++ b/providers/mysql/gda-mysql.h
@@ -48,6 +48,7 @@ typedef struct {
 	/* Backend version (to which we're connected). */
 	gchar            *version;
 	unsigned long     version_long;
+	gchar            *short_version;
 
 	/* specifies how case sensitiveness is */
 	gboolean          tables_case_sensitive;
diff --git a/providers/mysql/keywords_V50.list b/providers/mysql/keywords_V50.list
new file mode 100644
index 0000000..ddcf22b
--- /dev/null
+++ b/providers/mysql/keywords_V50.list
@@ -0,0 +1,80 @@
+#
+# MySQL 5.0's keywords
+#
+
+ADD 	ALL 	ALTER
+ANALYZE 	AND 	AS
+ASC 	ASENSITIVE 	BEFORE
+BETWEEN 	BIGINT 	BINARY
+BLOB 	BOTH 	BY
+CALL 	CASCADE 	CASE
+CHANGE 	CHAR 	CHARACTER
+CHECK 	COLLATE 	COLUMN
+COLUMNS 	CONDITION 	CONNECTION
+CONSTRAINT 	CONTINUE 	CONVERT
+CREATE 	CROSS 	CURRENT_DATE
+CURRENT_TIME 	CURRENT_TIMESTAMP 	CURRENT_USER
+CURSOR 	DATABASE 	DATABASES
+DAY_HOUR 	DAY_MICROSECOND 	DAY_MINUTE
+DAY_SECOND 	DEC 	DECIMAL
+DECLARE 	DEFAULT 	DELAYED
+DELETE 	DESC 	DESCRIBE
+DETERMINISTIC 	DISTINCT 	DISTINCTROW
+DIV 	DOUBLE 	DROP
+DUAL 	EACH 	ELSE
+ELSEIF 	ENCLOSED 	ESCAPED
+EXISTS 	EXIT 	EXPLAIN
+FALSE 	FETCH 	FIELDS
+FLOAT 	FLOAT4 	FLOAT8
+FOR 	FORCE 	FOREIGN
+FROM 	FULLTEXT 	GOTO
+GRANT 	GROUP 	HAVING
+HIGH_PRIORITY 	HOUR_MICROSECOND 	HOUR_MINUTE
+HOUR_SECOND 	IF 	IGNORE
+IN 	INDEX 	INFILE
+INNER 	INOUT 	INSENSITIVE
+INSERT 	INT 	INT1
+INT2 	INT3 	INT4
+INT8 	INTEGER 	INTERVAL
+INTO 	IS 	ITERATE
+JOIN 	KEY 	KEYS
+KILL 	LABEL 	LEADING
+LEAVE 	LEFT 	LIKE
+LIMIT 	LINES 	LOAD
+LOCALTIME 	LOCALTIMESTAMP 	LOCK
+LONG 	LONGBLOB 	LONGTEXT
+LOOP 	LOW_PRIORITY 	MATCH
+MEDIUMBLOB 	MEDIUMINT 	MEDIUMTEXT
+MIDDLEINT 	MINUTE_MICROSECOND 	MINUTE_SECOND
+MOD 	MODIFIES 	NATURAL
+NOT 	NO_WRITE_TO_BINLOG 	NULL
+NUMERIC 	ON 	OPTIMIZE
+OPTION 	OPTIONALLY 	OR
+ORDER 	OUT 	OUTER
+OUTFILE 	PRECISION 	PRIMARY
+PRIVILEGES 	PROCEDURE 	PURGE
+READ 	READS 	REAL
+REFERENCES 	REGEXP 	RELEASE
+RENAME 	REPEAT 	REPLACE
+REQUIRE 	RESTRICT 	RETURN
+REVOKE 	RIGHT 	RLIKE
+SCHEMA 	SCHEMAS 	SECOND_MICROSECOND
+SELECT 	SENSITIVE 	SEPARATOR
+SET 	SHOW 	SMALLINT
+SONAME 	SPATIAL 	SPECIFIC
+SQL 	SQLEXCEPTION 	SQLSTATE
+SQLWARNING 	SQL_BIG_RESULT 	SQL_CALC_FOUND_ROWS
+SQL_SMALL_RESULT 	SSL 	STARTING
+STRAIGHT_JOIN 	TABLE 	TABLES
+TERMINATED 	THEN 	TINYBLOB
+TINYINT 	TINYTEXT 	TO
+TRAILING 	TRIGGER 	TRUE
+UNDO 	UNION 	UNIQUE
+UNLOCK 	UNSIGNED 	UPDATE
+UPGRADE 	USAGE 	USE
+USING 	UTC_DATE 	UTC_TIME
+UTC_TIMESTAMP 	VALUES 	VARBINARY
+VARCHAR 	VARCHARACTER 	VARYING
+WHEN 	WHERE 	WHILE
+WITH 	WRITE 	XOR
+YEAR_MONTH 	ZEROFILL
diff --git a/providers/mysql/keywords_V51.list b/providers/mysql/keywords_V51.list
new file mode 100644
index 0000000..601065f
--- /dev/null
+++ b/providers/mysql/keywords_V51.list
@@ -0,0 +1,80 @@
+#
+# MySQL 5.1's keywords
+#
+
+ACCESSIBLE 	ADD 	ALL
+ALTER 	ANALYZE 	AND
+AS 	ASC 	ASENSITIVE
+BEFORE 	BETWEEN 	BIGINT
+BINARY 	BLOB 	BOTH
+BY 	CALL 	CASCADE
+CASE 	CHANGE 	CHAR
+CHARACTER 	CHECK 	COLLATE
+COLUMN 	CONDITION 	CONNECTION
+CONSTRAINT 	CONTINUE 	CONVERT
+CREATE 	CROSS 	CURRENT_DATE
+CURRENT_TIME 	CURRENT_TIMESTAMP 	CURRENT_USER
+CURSOR 	DATABASE 	DATABASES
+DAY_HOUR 	DAY_MICROSECOND 	DAY_MINUTE
+DAY_SECOND 	DEC 	DECIMAL
+DECLARE 	DEFAULT 	DELAYED
+DELETE 	DESC 	DESCRIBE
+DETERMINISTIC 	DISTINCT 	DISTINCTROW
+DIV 	DOUBLE 	DROP
+DUAL 	EACH 	ELSE
+ELSEIF 	ENCLOSED 	ESCAPED
+EXISTS 	EXIT 	EXPLAIN
+FALSE 	FETCH 	FLOAT
+FLOAT4 	FLOAT8 	FOR
+FORCE 	FOREIGN 	FROM
+FULLTEXT 	GOTO 	GRANT
+GROUP 	HAVING 	HIGH_PRIORITY
+HOUR_MICROSECOND 	HOUR_MINUTE 	HOUR_SECOND
+IF 	IGNORE 	IN
+INDEX 	INFILE 	INNER
+INOUT 	INSENSITIVE 	INSERT
+INT 	INT1 	INT2
+INT3 	INT4 	INT8
+INTEGER 	INTERVAL 	INTO
+IS 	ITERATE 	JOIN
+KEY 	KEYS 	KILL
+LABEL 	LEADING 	LEAVE
+LEFT 	LIKE 	LIMIT
+LINEAR 	LINES 	LOAD
+LOCALTIME 	LOCALTIMESTAMP 	LOCK
+LONG 	LONGBLOB 	LONGTEXT
+LOOP 	LOW_PRIORITY 	MASTER_SSL_VERIFY_SERVER_CERT
+MATCH 	MEDIUMBLOB 	MEDIUMINT
+MEDIUMTEXT 	MIDDLEINT 	MINUTE_MICROSECOND
+MINUTE_SECOND 	MOD 	MODIFIES
+NATURAL 	NOT 	NO_WRITE_TO_BINLOG
+NULL 	NUMERIC 	ON
+OPTIMIZE 	OPTION 	OPTIONALLY
+OR 	ORDER 	OUT
+OUTER 	OUTFILE 	PRECISION
+PRIMARY 	PROCEDURE 	PURGE
+RANGE 	READ 	READS
+READ_ONLY 	READ_WRITE 	REAL
+REFERENCES 	REGEXP 	RELEASE
+RENAME 	REPEAT 	REPLACE
+REQUIRE 	RESTRICT 	RETURN
+REVOKE 	RIGHT 	RLIKE
+SCHEMA 	SCHEMAS 	SECOND_MICROSECOND
+SELECT 	SENSITIVE 	SEPARATOR
+SET 	SHOW 	SMALLINT
+SPATIAL 	SPECIFIC 	SQL
+SQLEXCEPTION 	SQLSTATE 	SQLWARNING
+SQL_BIG_RESULT 	SQL_CALC_FOUND_ROWS 	SQL_SMALL_RESULT
+SSL 	STARTING 	STRAIGHT_JOIN
+TABLE 	TERMINATED 	THEN
+TINYBLOB 	TINYINT 	TINYTEXT
+TO 	TRAILING 	TRIGGER
+TRUE 	UNDO 	UNION
+UNIQUE 	UNLOCK 	UNSIGNED
+UPDATE 	UPGRADE 	USAGE
+USE 	USING 	UTC_DATE
+UTC_TIME 	UTC_TIMESTAMP 	VALUES
+VARBINARY 	VARCHAR 	VARCHARACTER
+VARYING 	WHEN 	WHERE
+WHILE 	WITH 	WRITE
+XOR 	YEAR_MONTH 	ZEROFILL
\ No newline at end of file
diff --git a/providers/mysql/keywords_V54.list b/providers/mysql/keywords_V54.list
new file mode 100644
index 0000000..a075ce4
--- /dev/null
+++ b/providers/mysql/keywords_V54.list
@@ -0,0 +1,79 @@
+#
+# MySQL 5.4's keywords
+#
+
+ACCESSIBLE 	ADD 	ALL
+ALTER 	ANALYZE 	AND
+AS 	ASC 	ASENSITIVE
+BEFORE 	BETWEEN 	BIGINT
+BINARY 	BLOB 	BOTH
+BY 	CALL 	CASCADE
+CASE 	CHANGE 	CHAR
+CHARACTER 	CHECK 	COLLATE
+COLUMN 	CONDITION 	CONSTRAINT
+CONTINUE 	CONVERT 	CREATE
+CROSS 	CURRENT_DATE 	CURRENT_TIME
+CURRENT_TIMESTAMP 	CURRENT_USER 	CURSOR
+DATABASE 	DATABASES 	DAY_HOUR
+DAY_MICROSECOND 	DAY_MINUTE 	DAY_SECOND
+DEC 	DECIMAL 	DECLARE
+DEFAULT 	DELAYED 	DELETE
+DESC 	DESCRIBE 	DETERMINISTIC
+DISTINCT 	DISTINCTROW 	DIV
+DOUBLE 	DROP 	DUAL
+EACH 	ELSE 	ELSEIF
+ENCLOSED 	ESCAPED 	EXISTS
+EXIT 	EXPLAIN 	FALSE
+FETCH 	FLOAT 	FLOAT4
+FLOAT8 	FOR 	FORCE
+FOREIGN 	FROM 	FULLTEXT
+GRANT 	GROUP 	HAVING
+HIGH_PRIORITY 	HOUR_MICROSECOND 	HOUR_MINUTE
+HOUR_SECOND 	IF 	IGNORE
+IN 	INDEX 	INFILE
+INNER 	INOUT 	INSENSITIVE
+INSERT 	INT 	INT1
+INT2 	INT3 	INT4
+INT8 	INTEGER 	INTERVAL
+INTO 	IS 	ITERATE
+JOIN 	KEY 	KEYS
+KILL 	LEADING 	LEAVE
+LEFT 	LIKE 	LIMIT
+LINEAR 	LINES 	LOAD
+LOCALTIME 	LOCALTIMESTAMP 	LOCK
+LONG 	LONGBLOB 	LONGTEXT
+LOOP 	LOW_PRIORITY 	MASTER_SSL_VERIFY_SERVER_CERT
+MATCH 	MEDIUMBLOB 	MEDIUMINT
+MEDIUMTEXT 	MIDDLEINT 	MINUTE_MICROSECOND
+MINUTE_SECOND 	MOD 	MODIFIES
+NATURAL 	NOT 	NO_WRITE_TO_BINLOG
+NULL 	NUMERIC 	ON
+OPTIMIZE 	OPTION 	OPTIONALLY
+OR 	ORDER 	OUT
+OUTER 	OUTFILE 	PRECISION
+PRIMARY 	PROCEDURE 	PURGE
+RANGE 	READ 	READS
+READ_WRITE 	REAL 	REFERENCES
+REGEXP 	RELEASE 	RENAME
+REPEAT 	REPLACE 	REQUIRE
+RESTRICT 	RETURN 	REVOKE
+RIGHT 	RLIKE 	SCHEMA
+SCHEMAS 	SECOND_MICROSECOND 	SELECT
+SENSITIVE 	SEPARATOR 	SET
+SHOW 	SMALLINT 	SPATIAL
+SPECIFIC 	SQL 	SQLEXCEPTION
+SQLSTATE 	SQLWARNING 	SQL_BIG_RESULT
+SQL_CALC_FOUND_ROWS 	SQL_SMALL_RESULT 	SSL
+STARTING 	STRAIGHT_JOIN 	TABLE
+TERMINATED 	THEN 	TINYBLOB
+TINYINT 	TINYTEXT 	TO
+TRAILING 	TRIGGER 	TRUE
+UNDO 	UNION 	UNIQUE
+UNLOCK 	UNSIGNED 	UPDATE
+USAGE 	USE 	USING
+UTC_DATE 	UTC_TIME 	UTC_TIMESTAMP
+VALUES 	VARBINARY 	VARCHAR
+VARCHARACTER 	VARYING 	WHEN
+WHERE 	WHILE 	WITH
+WRITE 	XOR 	YEAR_MONTH
+ZEROFILL
\ No newline at end of file
diff --git a/providers/mysql/keywords_V60.list b/providers/mysql/keywords_V60.list
new file mode 100644
index 0000000..f0d2ca0
--- /dev/null
+++ b/providers/mysql/keywords_V60.list
@@ -0,0 +1,81 @@
+#
+# MySQL 6.0's keywords
+#
+
+ACCESSIBLE 	ADD 	ALL
+ALTER 	ANALYZE 	AND
+AS 	ASC 	ASENSITIVE
+BEFORE 	BETWEEN 	BIGINT
+BINARY 	BLOB 	BOTH
+BY 	CALL 	CASCADE
+CASE 	CHANGE 	CHAR
+CHARACTER 	CHECK 	COLLATE
+COLUMN 	CONDITION 	CONSTRAINT
+CONTINUE 	CONVERT 	CREATE
+CROSS 	CURRENT_DATE 	CURRENT_TIME
+CURRENT_TIMESTAMP 	CURRENT_USER 	CURSOR
+DATABASE 	DATABASES 	DAY_HOUR
+DAY_MICROSECOND 	DAY_MINUTE 	DAY_SECOND
+DEC 	DECIMAL 	DECLARE
+DEFAULT 	DELAYED 	DELETE
+DESC 	DESCRIBE 	DETERMINISTIC
+DISTINCT 	DISTINCTROW 	DIV
+DOUBLE 	DROP 	DUAL
+EACH 	ELSE 	ELSEIF
+ENCLOSED 	ESCAPED 	EXISTS
+EXIT 	EXPLAIN 	FALSE
+FETCH 	FLOAT 	FLOAT4
+FLOAT8 	FOR 	FORCE
+FOREIGN 	FROM 	FULLTEXT
+GRANT 	GROUP 	HAVING
+HIGH_PRIORITY 	HOUR_MICROSECOND 	HOUR_MINUTE
+HOUR_SECOND 	IF 	IGNORE
+IGNORE_SERVER_IDS 	IN 	INDEX
+INFILE 	INNER 	INOUT
+INSENSITIVE 	INSERT 	INT
+INT1 	INT2 	INT3
+INT4 	INT8 	INTEGER
+INTERVAL 	INTO 	IS
+ITERATE 	JOIN 	KEY
+KEYS 	KILL 	LEADING
+LEAVE 	LEFT 	LIKE
+LIMIT 	LINEAR 	LINES
+LOAD 	LOCALTIME 	LOCALTIMESTAMP
+LOCK 	LONG 	LONGBLOB
+LONGTEXT 	LOOP 	LOW_PRIORITY
+MASTER_HEARTBEAT_PERIOD 	MASTER_SSL_VERIFY_SERVER_CERT 	MATCH
+MEDIUMBLOB 	MEDIUMINT 	MEDIUMTEXT
+MIDDLEINT 	MINUTE_MICROSECOND 	MINUTE_SECOND
+MOD 	MODIFIES 	NATURAL
+NOT 	NO_WRITE_TO_BINLOG 	NULL
+NUMERIC 	ON 	OPTIMIZE
+OPTION 	OPTIONALLY 	OR
+ORDER 	OUT 	OUTER
+OUTFILE 	OVERWRITE 	PRECISION
+PRIMARY 	PROCEDURE 	PURGE
+RANGE 	READ 	READS
+READ_ONLY 	READ_WRITE 	REAL
+REFERENCES 	REGEXP 	RELEASE
+RENAME 	REPEAT 	REPLACE
+REQUIRE 	RESIGNAL 	RESTRICT
+RETURN 	REVOKE 	RIGHT
+RLIKE 	SCHEMA 	SCHEMAS
+SECOND_MICROSECOND 	SELECT 	SENSITIVE
+SEPARATOR 	SET 	SHOW
+SIGNAL 	SKIP_GAP_EVENT 	SMALLINT
+SPATIAL 	SPECIFIC 	SQL
+SQLEXCEPTION 	SQLSTATE 	SQLWARNING
+SQL_BIG_RESULT 	SQL_CALC_FOUND_ROWS 	SQL_SMALL_RESULT
+SSL 	STARTING 	STRAIGHT_JOIN
+TABLE 	TERMINATED 	THEN
+TINYBLOB 	TINYINT 	TINYTEXT
+TO 	TRAILING 	TRIGGER
+TRUE 	UNDO 	UNION
+UNIQUE 	UNLOCK 	UNSIGNED
+UPDATE 	USAGE 	USE
+USING 	UTC_DATE 	UTC_TIME
+UTC_TIMESTAMP 	VALUES 	VARBINARY
+VARCHAR 	VARCHARACTER 	VARYING
+WHEN 	WHERE 	WHILE
+WITH 	WRITE 	XOR
+YEAR_MONTH 	ZEROFILL
\ No newline at end of file
diff --git a/providers/postgres/Makefile.am b/providers/postgres/Makefile.am
index 51418e9..0f048eb 100644
--- a/providers/postgres/Makefile.am
+++ b/providers/postgres/Makefile.am
@@ -7,15 +7,20 @@ AM_CPPFLAGS = \
 	-I$(top_builddir) \
 	$(LIBGDA_CFLAGS) $(POSTGRES_CFLAGS) 
 
-# parser generation
-parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
-	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
+keyword_files=keywords_82.list keywords_83.list keywords_84.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/postgres/,$(keyword_files))
 
 mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
 	$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
 
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
-	./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_82.list V82 > keywords_hash.c
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_83.list V83 >> keywords_hash.c
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_84.list V84 >> keywords_hash.c
+
+# parser generation
+parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
+	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
 
 gen_def$(EXEEXT_FOR_BUILD): gen_def.c
 	$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_srcdir)/libgda/sql-parser/token_types.h"\" $(srcdir)/gen_def.c
@@ -77,7 +82,7 @@ xml_DATA = $(xml_in_files:.xml.in=.xml)
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libgda-postgres-4.0.pc
 
-EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y gen_def.c keywords.list
+EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y gen_def.c $(keyword_files)
 DISTCLEANFILES = $(xml_DATA)
 
 CLEANFILES = parser.h parser.c parser.out postgres_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
diff --git a/providers/postgres/gda-postgres-meta.c b/providers/postgres/gda-postgres-meta.c
index a1b7472..d27ad1c 100644
--- a/providers/postgres/gda-postgres-meta.c
+++ b/providers/postgres/gda-postgres-meta.c
@@ -32,7 +32,6 @@
 #include <libgda/gda-connection-private.h>
 #include <libgda/gda-data-model-array.h>
 #include <libgda/gda-set.h>
-#include "keywords_hash.c" /* this one is dynamically generated */
 
 /*
  * predefined statements' IDs
@@ -276,8 +275,9 @@ _gda_postgres_provider_meta_init (GdaServerProvider *provider)
 				    "name2", G_TYPE_STRING, "");
 
 	g_static_mutex_unlock (&init_mutex);
+
 #ifdef GDA_DEBUG
-	test_keywords ();
+	_gda_postgres_test_keywords ();
 #endif
 }
 
@@ -287,12 +287,17 @@ _gda_postgres_meta__info (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CATALOG], NULL, error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
 	g_object_unref (model);
 
@@ -343,7 +348,7 @@ _gda_postgres_meta__btypes (GdaServerProvider *prov, GdaConnection *cnc,
 
 	/* modify meta store with @proxy */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, proxy, NULL, error, NULL);
 	}
 	g_object_unref (proxy);
@@ -358,13 +363,18 @@ _gda_postgres_meta__udt (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_UDT_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -378,6 +388,11 @@ _gda_postgres_meta_udt (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), udt_catalog, error))
 		return FALSE;
@@ -387,7 +402,7 @@ _gda_postgres_meta_udt (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 
@@ -400,13 +415,18 @@ _gda_postgres_meta__udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_UDT_COLUMNS_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -420,6 +440,11 @@ _gda_postgres_meta_udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (!gda_holder_set_value (gda_set_get_holder (i_set, "cat"), udt_catalog, error))
 		return FALSE;
@@ -431,7 +456,7 @@ _gda_postgres_meta_udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 
@@ -461,13 +486,18 @@ _gda_postgres_meta__domains (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_DOMAINS_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -481,6 +511,11 @@ _gda_postgres_meta_domains (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), domain_catalog, error))
 		return FALSE;
@@ -490,7 +525,7 @@ _gda_postgres_meta_domains (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 
@@ -503,13 +538,18 @@ _gda_postgres_meta__constraints_dom (GdaServerProvider *prov, GdaConnection *cnc
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_DOMAINS_CONSTRAINTS_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -524,6 +564,11 @@ _gda_postgres_meta_constraints_dom (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), domain_catalog, error))
 		return FALSE;
@@ -535,7 +580,7 @@ _gda_postgres_meta_constraints_dom (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 
@@ -565,7 +610,7 @@ _gda_postgres_meta__el_types (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -580,16 +625,17 @@ _gda_postgres_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc,
 	const gchar *cstr;
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "name"), specific_name, error))
 		return FALSE;
 	cstr = g_value_get_string (specific_name);
 	if (*cstr == 'C') {
 		/* check correct postgres server version */
-		PostgresConnectionData *cdata;
-		cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
-		if (!cdata)
-			return FALSE;
 		if (cdata->version_float < 8.2) {
 			g_set_error (error, GDA_SERVER_PROVIDER_ERROR, GDA_SERVER_PROVIDER_SERVER_VERSION_ERROR,
 				     "%s", _("PostgreSQL version 8.2.0 at least is required"));
@@ -616,7 +662,7 @@ _gda_postgres_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -665,12 +711,17 @@ _gda_postgres_meta__schemata (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_SCHEMAS_ALL], i_set, error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 	
@@ -684,6 +735,11 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), catalog_name, error))
 		return FALSE;
@@ -692,7 +748,7 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
 		if (!model)
 			return FALSE;
 
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
 	}
 	else {
@@ -702,7 +758,7 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
 		if (!model)
 			return FALSE;
 		
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, "schema_name = ##name::string", error, 
 						"name", schema_name_n, NULL);
 	}
@@ -742,12 +798,12 @@ _gda_postgres_meta__tables_views (GdaServerProvider *prov, GdaConnection *cnc,
 	c2 = *context; /* copy contents, just because we need to modify @context->table_name */
 	if (retval) {
 		c2.table_name = "_tables";
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &c2, tables_model, error);
 	}
 	if (retval) {
 		c2.table_name = "_views";
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &c2, views_model, error);
 	}
 	g_object_unref (tables_model);
@@ -807,12 +863,12 @@ _gda_postgres_meta_tables_views (GdaServerProvider *prov, GdaConnection *cnc,
 	c2 = *context; /* copy contents, just because we need to modify @context->table_name */
 	if (retval) {
 		c2.table_name = "_tables";
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &c2, tables_model, error);
 	}
 	if (retval) {
 		c2.table_name = "_views";
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, &c2, views_model, error);
 	}
 	g_object_unref (tables_model);
@@ -904,7 +960,7 @@ gboolean _gda_postgres_meta__columns (GdaServerProvider *prov, GdaConnection *cn
 
 	/* modify meta store with @proxy */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, proxy, error);
 	}
 	g_object_unref (proxy);
@@ -1010,7 +1066,7 @@ _gda_postgres_meta_columns (GdaServerProvider *prov, GdaConnection *cnc,
 
 	/* modify meta store with @proxy */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, proxy, 
 						"table_schema = ##schema::string AND table_name = ##name::string", error, 
 						"schema", table_schema, "name", table_name, NULL);
@@ -1043,7 +1099,7 @@ _gda_postgres_meta__view_cols (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 	
@@ -1058,6 +1114,11 @@ _gda_postgres_meta_view_cols (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), view_catalog, error))
 		return FALSE;
@@ -1069,7 +1130,7 @@ _gda_postgres_meta_view_cols (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 
@@ -1082,13 +1143,18 @@ _gda_postgres_meta__constraints_tab (GdaServerProvider *prov, GdaConnection *cnc
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1103,6 +1169,11 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
 		return FALSE;
@@ -1117,7 +1188,7 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
 		if (!model)
 			return FALSE;
 		if (retval) {
-			gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+			gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model, 
 							"table_schema = ##schema::string AND table_name = ##name::string", 
 							error, 
@@ -1133,7 +1204,7 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
 		if (!model)
 			return FALSE;
 		if (retval) {
-			gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+			gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 			retval = gda_meta_store_modify (store, context->table_name, model, 
 							"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string", error, 
 							"schema", table_schema, "name", table_name, "name2", constraint_name_n, NULL);
@@ -1151,13 +1222,18 @@ _gda_postgres_meta__constraints_ref (GdaServerProvider *prov, GdaConnection *cnc
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_REF_CONSTRAINTS_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1172,6 +1248,11 @@ _gda_postgres_meta_constraints_ref (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
 		return FALSE;
@@ -1189,7 +1270,7 @@ _gda_postgres_meta_constraints_ref (GdaServerProvider *prov, GdaConnection *cnc,
 
 	/* modify meta store */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, 
 						"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string", 
 						error, 
@@ -1206,13 +1287,18 @@ _gda_postgres_meta__key_columns (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_KEY_COLUMN_USAGE_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1227,6 +1313,11 @@ _gda_postgres_meta_key_columns (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
 		return FALSE;
@@ -1244,7 +1335,7 @@ _gda_postgres_meta_key_columns (GdaServerProvider *prov, GdaConnection *cnc,
 
 	/* modify meta store */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, 
 						"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string", 
 						error, 
@@ -1261,13 +1352,18 @@ _gda_postgres_meta__check_columns (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CHECK_COLUMN_USAGE_ALL], NULL, 
 							 error);
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1282,6 +1378,11 @@ _gda_postgres_meta_check_columns (GdaServerProvider *prov, GdaConnection *cnc,
 {
 	GdaDataModel *model;
 	gboolean retval = TRUE;
+	PostgresConnectionData *cdata;
+
+	cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
 
 	if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
 		return FALSE;
@@ -1299,7 +1400,7 @@ _gda_postgres_meta_check_columns (GdaServerProvider *prov, GdaConnection *cnc,
 
 	/* modify meta store */
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify (store, context->table_name, model, 
 						"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string", 
 						error, 
@@ -1333,7 +1434,7 @@ _gda_postgres_meta__triggers (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1372,7 +1473,7 @@ _gda_postgres_meta_triggers (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1402,7 +1503,7 @@ _gda_postgres_meta__routines (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1446,7 +1547,7 @@ _gda_postgres_meta_routines (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1504,7 +1605,7 @@ _gda_postgres_meta__routine_col (GdaServerProvider *prov, GdaConnection *cnc,
 	}
 
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, proxy, error);
 	}
 	g_object_unref (model);
@@ -1574,7 +1675,7 @@ GdaDataModel *model, *proxy;
 	}
 
 	if (retval) {
-		gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+		gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 		retval = gda_meta_store_modify_with_context (store, context, proxy, error);
 	}
 	g_object_unref (model);
@@ -1606,7 +1707,7 @@ _gda_postgres_meta__routine_par (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
@@ -1645,7 +1746,7 @@ _gda_postgres_meta_routine_par (GdaServerProvider *prov, GdaConnection *cnc,
 	if (!model)
 		return FALSE;
 
-	gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+	gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
 	retval = gda_meta_store_modify_with_context (store, context, model, error);
 	g_object_unref (model);
 		
diff --git a/providers/postgres/gda-postgres-provider.c b/providers/postgres/gda-postgres-provider.c
index b4e7aee..37f3d6f 100644
--- a/providers/postgres/gda-postgres-provider.c
+++ b/providers/postgres/gda-postgres-provider.c
@@ -119,6 +119,11 @@ static GObject             *gda_postgres_provider_statement_execute (GdaServerPr
 								     guint *task_id, GdaServerProviderExecCallback async_cb, 
 								     gpointer cb_data, GError **error);
 
+/* Quoting */
+static gchar               *gda_postgresql_identifier_quote    (GdaServerProvider *provider, GdaConnection *cnc,
+								const gchar *id,
+								gboolean meta_store_convention, gboolean force_quotes);
+
 /* distributed transactions */
 static gboolean gda_postgres_provider_xa_start    (GdaServerProvider *provider, GdaConnection *cnc, 
 						   const GdaXaTransactionId *xid, GError **error);
@@ -188,6 +193,7 @@ gda_postgres_provider_class_init (GdaPostgresProviderClass *klass)
 	provider_class->get_def_dbms_type = gda_postgres_provider_get_default_dbms_type;
 
 	provider_class->create_connection = NULL;
+	provider_class->identifier_quote = gda_postgresql_identifier_quote;
 	provider_class->open_connection = gda_postgres_provider_open_connection;
 	provider_class->close_connection = gda_postgres_provider_close_connection;
 	provider_class->get_database = gda_postgres_provider_get_database;
@@ -698,6 +704,8 @@ gda_postgres_provider_open_connection (GdaServerProvider *provider, GdaConnectio
 	}
         cdata->version = g_strdup (PQgetvalue(pg_res, 0, 0));
         cdata->version_float = get_pg_version_float (cdata->version);
+	cdata->short_version = g_strdup_printf ("%d%d", (int) cdata->version_float,
+						(int) ((cdata->version_float - (int) cdata->version_float) * 10));
         PQclear (pg_res);
 
 	/*
@@ -2433,6 +2441,83 @@ gda_postgres_provider_xa_recover (GdaServerProvider *provider, GdaConnection *cn
 	}
 }
 
+static gchar *
+identifier_add_quotes (const gchar *str)
+{
+        gchar *retval, *rptr;
+        const gchar *sptr;
+        gint len;
+
+        if (!str)
+                return NULL;
+
+        len = strlen (str);
+        retval = g_new (gchar, 2*len + 3);
+        *retval = '"';
+        for (rptr = retval+1, sptr = str; *sptr; sptr++, rptr++) {
+                if (*sptr == '"') {
+                        *rptr = '\\';
+                        rptr++;
+                        *rptr = *sptr;
+                }
+                else
+                        *rptr = *sptr;
+        }
+        *rptr = '"';
+        rptr++;
+        *rptr = 0;
+        return retval;
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+	const gchar *ptr;
+
+	g_return_val_if_fail (str, FALSE);
+	for (ptr = str; *ptr; ptr++) {
+		/* quote if 1st char is a number */
+		if ((*ptr <= '9') && (*ptr >= '0')) {
+			if (ptr == str)
+				return TRUE;
+			continue;
+		}
+		if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+		    ((*ptr >= 'a') && (*ptr <= 'z')))
+			continue;
+
+		if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+			return TRUE;
+	}
+	return FALSE;
+}
+
+static gchar *
+gda_postgresql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+				 const gchar *id,
+				 gboolean meta_store_convention, gboolean force_quotes)
+{
+        GdaSqlReservedKeywordsFunc kwfunc;
+        PostgresConnectionData *cdata = NULL;
+
+        if (cnc) {
+                cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+                if (!cdata)
+                        return NULL;
+        }
+
+        kwfunc = _gda_postgres_get_reserved_keyword_func (cdata);
+	if (*id == '"') {
+		/* there are already some quotes */
+		return g_strdup (id);
+	}
+	if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+		return identifier_add_quotes (id);
+	
+	/* nothing to do */
+	return g_strdup (id);
+}
+
 
 /*
  * Free connection's specific data
@@ -2460,6 +2545,7 @@ gda_postgres_free_cnc_data (PostgresConnectionData *cdata)
 		g_hash_table_destroy (cdata->h_table);
 	
 	g_free (cdata->version);
+	g_free (cdata->short_version);
 	g_free (cdata->avoid_types_oids);
 	g_free (cdata->any_type_oid);
 
diff --git a/providers/postgres/gda-postgres-util.c b/providers/postgres/gda-postgres-util.c
index d372eff..df0be97 100644
--- a/providers/postgres/gda-postgres-util.c
+++ b/providers/postgres/gda-postgres-util.c
@@ -25,6 +25,9 @@
 #include <glib/gi18n-lib.h>
 #include "gda-postgres-util.h"
 
+#include <libgda/sqlite/keywords_hash.h>
+#include "keywords_hash.c" /* this one is dynamically generated */
+
 static GdaConnectionEventCode
 gda_postgres_sqlsate_to_gda_code (const gchar *sqlstate)
 {
@@ -129,3 +132,34 @@ _gda_postgres_type_oid_to_gda (PostgresConnectionData *cdata, Oid postgres_type)
 	else
 		return G_TYPE_STRING;
 }
+
+#ifdef GDA_DEBUG
+void
+_gda_postgres_test_keywords (void)
+{
+        V82test_keywords();
+        V83test_keywords();
+        V84test_keywords();
+}
+#endif
+
+GdaSqlReservedKeywordsFunc
+_gda_postgres_get_reserved_keyword_func (PostgresConnectionData *cdata)
+{
+	if (cdata && cdata->short_version) {
+		switch (*cdata->short_version) {
+                case '8':
+                        if (cdata->short_version[1] == '2')
+                                return V82is_keyword;
+                        if (cdata->short_version[1] == '3')
+                                return V83is_keyword;
+                        if (cdata->short_version[1] == '4')
+                                return V84is_keyword;
+                        return V84is_keyword;
+                default:
+                        return V84is_keyword;
+                break;
+                }
+	}
+        return V84is_keyword;
+}
diff --git a/providers/postgres/gda-postgres-util.h b/providers/postgres/gda-postgres-util.h
index 4b05901..e961f12 100644
--- a/providers/postgres/gda-postgres-util.h
+++ b/providers/postgres/gda-postgres-util.h
@@ -34,6 +34,11 @@ PGresult           *_gda_postgres_PQexec_wrap              (GdaConnection *cnc,
 int                 _gda_postgres_get_connection_type_list (GdaConnection *cnc, PostgresConnectionData *cdata);
 GType               _gda_postgres_type_oid_to_gda          (PostgresConnectionData *cdata, Oid postgres_type);
 
+#ifdef GDA_DEBUG
+void                _gda_postgres_test_keywords (void);
+#endif
+GdaSqlReservedKeywordsFunc _gda_postgres_get_reserved_keyword_func (PostgresConnectionData *cdata);
+
 G_END_DECLS
 
 #endif
diff --git a/providers/postgres/gda-postgres.h b/providers/postgres/gda-postgres.h
index 2fe7724..95acdca 100644
--- a/providers/postgres/gda-postgres.h
+++ b/providers/postgres/gda-postgres.h
@@ -58,6 +58,7 @@ typedef struct {
         /* Version of the backend to which we are connected */
         gchar              *version;
         gfloat              version_float;
+        gchar              *short_version;
 
         /* Internal data types not returned */
         gchar              *avoid_types;
diff --git a/providers/postgres/keywords_82.list b/providers/postgres/keywords_82.list
new file mode 100644
index 0000000..9d143c2
--- /dev/null
+++ b/providers/postgres/keywords_82.list
@@ -0,0 +1,345 @@
+#
+# PostgreSQL 8.3's keywords
+#
+
+abort
+absolute
+access
+action
+add
+admin
+after
+aggregate
+all
+also
+alter
+analyse
+analyze
+and
+any
+array
+as
+asc
+assertion
+assignment
+asymmetric
+at
+authorization
+backward
+before
+begin
+between
+bigint
+binary
+bit
+boolean
+both
+by
+cache
+called
+cascade
+cascaded
+case
+cast
+chain
+char
+character
+characteristics
+check
+checkpoint
+class
+close
+cluster
+coalesce
+collate
+column
+comment
+commit
+committed
+concurrently
+connection
+constraint
+constraints
+conversion
+convert
+copy
+create
+createdb
+createrole
+createuser
+cross
+csv
+current_date
+current_role
+current_time
+current_timestamp
+current_user
+cursor
+cycle
+database
+day
+deallocate
+dec
+decimal
+declare
+default
+defaults
+deferrable
+deferred
+definer
+delete
+delimiter
+delimiters
+desc
+disable
+distinct
+do
+domain
+double
+drop
+each
+else
+enable
+encoding
+encrypted
+end
+escape
+except
+excluding
+exclusive
+execute
+exists
+explain
+external
+extract
+false
+fetch
+first
+float
+for
+force
+foreign
+forward
+freeze
+from
+full
+function
+global
+grant
+granted
+greatest
+group
+handler
+having
+header
+hold
+hour
+if
+ilike
+immediate
+immutable
+implicit
+in
+including
+increment
+index
+indexes
+inherit
+inherits
+initially
+inner
+inout
+input
+insensitive
+insert
+instead
+int
+integer
+intersect
+interval
+into
+invoker
+is
+isnull
+isolation
+join
+key
+lancompiler
+language
+large
+last
+leading
+least
+left
+level
+like
+limit
+listen
+load
+local
+localtime
+localtimestamp
+location
+lock
+login
+match
+maxvalue
+minute
+minvalue
+mode
+month
+move
+names
+national
+natural
+nchar
+new
+next
+no
+nocreatedb
+nocreaterole
+nocreateuser
+noinherit
+nologin
+none
+nosuperuser
+not
+nothing
+notify
+notnull
+nowait
+null
+nullif
+numeric
+object
+of
+off
+offset
+oids
+old
+on
+only
+operator
+option
+or
+order
+out
+outer
+overlaps
+overlay
+owned
+owner
+partial
+password
+placing
+position
+precision
+prepare
+prepared
+preserve
+primary
+prior
+privileges
+procedural
+procedure
+quote
+read
+real
+reassign
+recheck
+references
+reindex
+relative
+release
+rename
+repeatable
+replace
+reset
+restart
+restrict
+returning
+returns
+revoke
+right
+role
+rollback
+row
+rows
+rule
+savepoint
+schema
+scroll
+second
+security
+select
+sequence
+serializable
+session
+session_user
+set
+setof
+share
+show
+similar
+simple
+smallint
+some
+stable
+start
+statement
+statistics
+stdin
+stdout
+storage
+strict
+substring
+superuser
+symmetric
+sysid
+system
+table
+tablespace
+temp
+template
+temporary
+then
+time
+timestamp
+to
+trailing
+transaction
+treat
+trigger
+trim
+true
+truncate
+trusted
+type
+uncommitted
+unencrypted
+union
+unique
+unknown
+unlisten
+until
+update
+user
+using
+vacuum
+valid
+validator
+values
+varchar
+varying
+verbose
+view
+volatile
+when
+where
+with
+without
+work
+write
+year
+zone
+
diff --git a/providers/postgres/keywords_83.list b/providers/postgres/keywords_83.list
new file mode 100644
index 0000000..e3c6874
--- /dev/null
+++ b/providers/postgres/keywords_83.list
@@ -0,0 +1,144 @@
+#
+# PostgreSQL 8.3's keywords
+#
+
+all
+analyse
+analyze
+and
+any
+array
+as
+asc
+asymmetric
+authorization
+between
+bigint
+binary
+bit
+boolean
+both
+case
+cast
+char
+character
+check
+coalesce
+collate
+column
+constraint
+create
+cross
+current_date
+current_role
+current_time
+current_timestamp
+current_user
+dec
+decimal
+default
+deferrable
+desc
+distinct
+do
+else
+end
+except
+exists
+extract
+false
+float
+for
+foreign
+freeze
+from
+full
+grant
+greatest
+group
+having
+ilike
+in
+initially
+inner
+inout
+int
+integer
+intersect
+interval
+into
+is
+isnull
+join
+leading
+least
+left
+like
+limit
+localtime
+localtimestamp
+national
+natural
+nchar
+new
+none
+not
+notnull
+null
+nullif
+numeric
+off
+offset
+old
+on
+only
+or
+order
+out
+outer
+overlaps
+overlay
+placing
+position
+precision
+primary
+real
+references
+returning
+right
+row
+select
+session_user
+setof
+similar
+smallint
+some
+substring
+symmetric
+table
+then
+time
+timestamp
+to
+trailing
+treat
+trim
+true
+union
+unique
+user
+using
+values
+varchar
+verbose
+when
+where
+with
+xmlattributes
+xmlconcat
+xmlelement
+xmlforest
+xmlparse
+xmlpi
+xmlroot
+xmlserialize
diff --git a/providers/postgres/keywords_84.list b/providers/postgres/keywords_84.list
new file mode 100644
index 0000000..2f715fb
--- /dev/null
+++ b/providers/postgres/keywords_84.list
@@ -0,0 +1,150 @@
+#
+# PostgreSQL 8.4's keywords
+#
+
+all
+analyse
+analyze
+and
+any
+array
+as
+asc
+asymmetric
+authorization
+between
+bigint
+binary
+bit
+boolean
+both
+case
+cast
+char
+character
+check
+coalesce
+collate
+column
+constraint
+create
+cross
+current_catalog
+current_date
+current_role
+current_schema
+current_time
+current_timestamp
+current_user
+dec
+decimal
+default
+deferrable
+desc
+distinct
+do
+else
+end
+except
+exists
+extract
+false
+fetch
+float
+for
+foreign
+freeze
+from
+full
+grant
+greatest
+group
+having
+ilike
+in
+initially
+inner
+inout
+int
+integer
+intersect
+interval
+into
+is
+isnull
+join
+leading
+least
+left
+like
+limit
+localtime
+localtimestamp
+national
+natural
+nchar
+new
+none
+not
+notnull
+null
+nullif
+numeric
+off
+offset
+old
+on
+only
+or
+order
+out
+outer
+over
+overlaps
+overlay
+placing
+position
+precision
+primary
+real
+references
+returning
+right
+row
+select
+session_user
+setof
+similar
+smallint
+some
+substring
+symmetric
+table
+then
+time
+timestamp
+to
+trailing
+treat
+trim
+true
+union
+unique
+user
+using
+values
+varchar
+variadic
+verbose
+when
+where
+window
+with
+xmlattributes
+xmlconcat
+xmlelement
+xmlforest
+xmlparse
+xmlpi
+xmlroot
+xmlserialize
diff --git a/providers/skel-implementation/capi/Makefile.am b/providers/skel-implementation/capi/Makefile.am
index ac3e543..58b357d 100644
--- a/providers/skel-implementation/capi/Makefile.am
+++ b/providers/skel-implementation/capi/Makefile.am
@@ -11,6 +11,16 @@ AM_CPPFLAGS = \
 	-I$(top_builddir) \
 	$(LIBGDA_CFLAGS) #$(CAPI_CFLAGS) 
 
+keyword_files=keywords.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/skel-implementation/capi/,$(keyword_files))
+
+mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
+	$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
+
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+	./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/skel-implementation/capi/keywords.list > keywords_hash.c
+
+
 # parser generation
 parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
 	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
@@ -21,7 +31,7 @@ gen_def$(EXEEXT_FOR_BUILD): gen_def.c
 capi_token_types.h: gen_def$(EXEEXT_FOR_BUILD) parser.h
 	./gen_def$(EXEEXT_FOR_BUILD) > capi_token_types.h
 
-$(OBJECTS) $(libgda_capi_la_OBJECTS): capi_token_types.h
+$(OBJECTS) $(libgda_capi_la_OBJECTS): capi_token_types.h keywords_hash.c
 
 libgda_capi_la_SOURCES = \
 	gda-capi-blob-op.c \
@@ -63,7 +73,8 @@ pkgconfigdir = $(libdir)/pkgconfig
 #pkgconfig_DATA = libgda-capi-4.0.pc
 noinst_DATA += libgda-capi-4.0.pc
 
-EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y gen_def.c
+EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y gen_def.c $(keyword_files)
 DISTCLEANFILES = $(noinst_DATA)
 
-CLEANFILES = parser.h parser.c parser.out capi_token_types.h gen_def$(EXEEXT_FOR_BUILD)
+CLEANFILES = parser.h parser.c parser.out capi_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
+	mkkeywordhash$(EXEEXT_FOR_BUILD) keywords_hash.c
diff --git a/providers/skel-implementation/capi/gda-capi-meta.c b/providers/skel-implementation/capi/gda-capi-meta.c
index ebecca3..ec70d31 100644
--- a/providers/skel-implementation/capi/gda-capi-meta.c
+++ b/providers/skel-implementation/capi/gda-capi-meta.c
@@ -33,6 +33,9 @@
 #include <libgda/gda-set.h>
 #include <libgda/gda-holder.h>
 
+#include <libgda/sqlite/keywords_hash.h>
+#include "keywords_hash.c" /* this one is dynamically generated */
+
 /*
  * predefined statements' IDs
  */
diff --git a/providers/skel-implementation/capi/keywords.list b/providers/skel-implementation/capi/keywords.list
new file mode 100644
index 0000000..be51f89
--- /dev/null
+++ b/providers/skel-implementation/capi/keywords.list
@@ -0,0 +1,13 @@
+#
+# List of reserved keywords
+#
+# one or more per line
+# last line must be empty
+# comments start with a '#' at the beginning of the line
+# lower or upper case does not matter
+#
+
+SELECT
+INSERT
+UPDATE
+DELETE
diff --git a/tests/.gitignore b/tests/.gitignore
index 3d3b592..bdadec1 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,3 +1,4 @@
 test-bin-converter
 test-ddl-creator
 test-sql-identifier
+test-identifiers-quotes
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7224cde..30e475a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,6 +1,6 @@
 noinst_LTLIBRARIES = libgda-test-4.0.la
 TESTS = test-ddl-creator test-bin-converter test-sql-identifier
-check_PROGRAMS = test-ddl-creator test-bin-converter test-sql-identifier
+check_PROGRAMS = test-ddl-creator test-bin-converter test-sql-identifier test-identifiers-quotes
 
 
 SUBDIRS = providers parser value-holders meta-store data-models multi-threading
@@ -52,4 +52,11 @@ test_sql_identifier_LDADD = \
         $(top_builddir)/libgda/libgda-4.0.la \
         $(LIBGDA_LIBS)
 
+test_identifiers_quotes_SOURCES = \
+        test-identifiers-quotes.c
+
+test_identifiers_quotes_LDADD = \
+        $(top_builddir)/libgda/libgda-4.0.la \
+        $(LIBGDA_LIBS)
+
 EXTRA_DIST = dbstruct.xml
\ No newline at end of file
diff --git a/tests/meta-store/common.c b/tests/meta-store/common.c
index 3edb52e..012355d 100644
--- a/tests/meta-store/common.c
+++ b/tests/meta-store/common.c
@@ -426,7 +426,7 @@ test_schemata_1 (GdaMetaStore *store)
 
 	import = common_load_csv_file ("data_schemata.csv", 3, "gboolean", -1);
 	DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "pg_catalog", "+2", "a user", "+3", "TRUE", NULL);
-	DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "public", "+2", "postgres", "+3", "FALSE", NULL);
+	DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "pub", "+2", "postgres", "+3", "FALSE", NULL);
 	DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "information_schema", "+2", "postgres", "+3", "TRUE", NULL);
 	TEST_MODIFY (store, TNAME, import, NULL, &error, NULL);
 	TEST_END (import);
diff --git a/tests/meta-store/data_columns.csv b/tests/meta-store/data_columns.csv
index 29b05d4..2d9f20c 100644
--- a/tests/meta-store/data_columns.csv
+++ b/tests/meta-store/data_columns.csv
@@ -1,286 +1,286 @@
-meta,public,_attributes,att_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_attributes,att_value,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_information_schema_catalog_name,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_owner,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_internal,4,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,short_type_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,full_type_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,gtype,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,synonyms,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,internal,6,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_column,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_maximum_length,7,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_octet_length,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,numeric_precision,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,numeric_scale,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,datetime_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_catalog,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_schema,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_name,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_catalog,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_schema,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_name,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,label,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_gtype,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_comments,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_short_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_full_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_internal,8,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,specific_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_catalog,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_schema,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_ordinal_position,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,min_cardinality,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,max_cardinality,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_all_types,short_type_name,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,gtype,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,full_type_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,internal,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_catalog,6,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_schema,7,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_name,8,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_catalog,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_schema,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_name,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_triggers,trigger_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_manipulation,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_table,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,action_statement,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,action_orientation,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,condition_timing,10,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_comments,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_short_name,12,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_full_name,13,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_comments,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_short_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_full_name,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_short_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_full_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,match_option,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,update_rule,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,delete_rule,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,check_clause,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,ordinal_position,8,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,is_deferrable,9,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,initially_deferred,10,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_constraint_column_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,column_name,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_catalog,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_schema,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_views,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,view_definition,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,check_option,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,is_updatable,6,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_table_usage,view_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,view_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,view_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,is_deferrable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,initially_deferred,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,data_type,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_maximum_length,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_octet_length,6,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_catalog,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_schema,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_name,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_catalog,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_schema,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,numeric_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,numeric_scale,14,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_default,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_gtype,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_comments,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_short_name,18,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_full_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_internal,20,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_column_usage,domain_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,domain_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,domain_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,column_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_parameters,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,ordinal_position,4,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,parameter_mode,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,parameter_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_type,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,return_type,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,returns_set,9,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_body,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_definition,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,external_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,external_language,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,parameter_style,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,is_deterministic,15,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,sql_data_access,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,is_null_call,17,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_comments,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_short_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_full_name,20,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,privilege_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,is_grantable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_type,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,is_insertable_into,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_comments,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_short_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_full_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,column_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_default,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,is_nullable,7,NULL,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,data_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_maximum_length,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_octet_length,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,numeric_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,numeric_scale,12,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,datetime_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_catalog,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_schema,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_name,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_catalog,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_schema,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_name,19,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,extra,20,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,is_updatable,21,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_comments,22,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_attributes,att_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_attributes,att_value,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_information_schema_catalog_name,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_owner,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_internal,4,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,short_type_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,full_type_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,gtype,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,synonyms,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,internal,6,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_column,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_maximum_length,7,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_octet_length,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,numeric_precision,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,numeric_scale,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,datetime_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_catalog,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_schema,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_name,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_catalog,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_schema,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_name,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,label,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_gtype,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_comments,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_short_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_full_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_internal,8,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,specific_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_catalog,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_schema,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_ordinal_position,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,min_cardinality,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,max_cardinality,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_all_types,short_type_name,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,gtype,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,full_type_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,internal,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_catalog,6,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_schema,7,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_name,8,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_catalog,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_schema,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_name,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_triggers,trigger_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_manipulation,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_table,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,action_statement,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,action_orientation,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,condition_timing,10,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_comments,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_short_name,12,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_full_name,13,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_comments,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_short_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_full_name,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_short_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_full_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,match_option,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,update_rule,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,delete_rule,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,check_clause,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,ordinal_position,8,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,is_deferrable,9,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,initially_deferred,10,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_constraint_column_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,column_name,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_catalog,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_schema,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_views,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,view_definition,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,check_option,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,is_updatable,6,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_table_usage,view_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,view_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,view_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,is_deferrable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,initially_deferred,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,data_type,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_maximum_length,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_octet_length,6,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_catalog,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_schema,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_name,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_catalog,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_schema,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,numeric_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,numeric_scale,14,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_default,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_gtype,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_comments,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_short_name,18,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_full_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_internal,20,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_column_usage,domain_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,domain_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,domain_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,column_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_parameters,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,ordinal_position,4,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,parameter_mode,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,parameter_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_type,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,return_type,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,returns_set,9,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_body,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_definition,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,external_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,external_language,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,parameter_style,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,is_deterministic,15,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,sql_data_access,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,is_null_call,17,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_comments,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_short_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_full_name,20,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,privilege_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,is_grantable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_type,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,is_insertable_into,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_comments,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_short_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_full_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,column_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_default,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,is_nullable,7,NULL,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,data_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_maximum_length,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_octet_length,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,numeric_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,numeric_scale,12,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,datetime_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_catalog,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_schema,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_name,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_catalog,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_schema,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_name,19,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,extra,20,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,is_updatable,21,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_comments,22,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
diff --git a/tests/meta-store/data_key_column_usage.csv b/tests/meta-store/data_key_column_usage.csv
index fc44dbe..b181e86 100644
--- a/tests/meta-store/data_key_column_usage.csv
+++ b/tests/meta-store/data_key_column_usage.csv
@@ -1,137 +1,137 @@
-"meta","public","_attributes_pkey","meta","public","_attributes","att_name","1"
-"meta","public","_schemata_pkey","meta","public","_schemata","catalog_name","1"
-"meta","public","_schemata_pkey","meta","public","_schemata","schema_name","2"
-"meta","public","_builtin_data_types_pkey","meta","public","_builtin_data_types","full_type_name","1"
-"meta","public","_udt_pkey","meta","public","_udt","udt_catalog","1"
-"meta","public","_udt_pkey","meta","public","_udt","udt_schema","2"
-"meta","public","_udt_pkey","meta","public","_udt","udt_name","3"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_catalog","1"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_schema","2"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_name","3"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_column","4"
-"meta","public","_enums_pkey","meta","public","_enums","udt_catalog","1"
-"meta","public","_enums_pkey","meta","public","_enums","udt_schema","2"
-"meta","public","_enums_pkey","meta","public","_enums","udt_name","3"
-"meta","public","_enums_pkey","meta","public","_enums","label","4"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_catalog","1"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_schema","2"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_name","3"
-"meta","public","_element_types_pkey","meta","public","_element_types","specific_name","1"
-"meta","public","_domains_pkey","meta","public","_domains","domain_catalog","1"
-"meta","public","_domains_pkey","meta","public","_domains","domain_schema","2"
-"meta","public","_domains_pkey","meta","public","_domains","domain_name","3"
-"meta","public","_tables_pkey","meta","public","_tables","table_catalog","1"
-"meta","public","_tables_pkey","meta","public","_tables","table_schema","2"
-"meta","public","_tables_pkey","meta","public","_tables","table_name","3"
-"meta","public","_views_pkey","meta","public","_views","table_catalog","1"
-"meta","public","_views_pkey","meta","public","_views","table_schema","2"
-"meta","public","_views_pkey","meta","public","_views","table_name","3"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_catalog","1"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_schema","2"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_name","3"
-"meta","public","_collations_pkey","meta","public","_collations","collation_catalog","1"
-"meta","public","_collations_pkey","meta","public","_collations","collation_schema","2"
-"meta","public","_collations_pkey","meta","public","_collations","collation_name","3"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_catalog","1"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_schema","2"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_name","3"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_catalog","1"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_schema","2"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_name","3"
-"meta","public","_routines_pkey","meta","public","_routines","specific_catalog","1"
-"meta","public","_routines_pkey","meta","public","_routines","specific_schema","2"
-"meta","public","_routines_pkey","meta","public","_routines","specific_name","3"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_catalog","1"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_schema","2"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_name","3"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_catalog","4"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_schema","5"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_table","6"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_manipulation","7"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_catalog","1"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_schema","2"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_table","3"
-"meta","public","_columns_pkey","meta","public","_columns","table_catalog","1"
-"meta","public","_columns_pkey","meta","public","_columns","table_schema","2"
-"meta","public","_columns_pkey","meta","public","_columns","table_name","3"
-"meta","public","_columns_pkey","meta","public","_columns","column_name","4"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_catalog","1"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_schema","2"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_name","3"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_catalog","1"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_schema","2"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_name","3"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_catalog","1"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_schema","2"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_name","3"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_catalog","1"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_schema","2"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_name","3"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_catalog","1"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_schema","2"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_name","3"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_catalog","1"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_schema","2"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_name","3"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_catalog","1"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_schema","2"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_name","3"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_catalog","1"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_schema","2"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_name","3"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_catalog","1"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_schema","2"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_name","3"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","ordinal_position","4"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_catalog","1"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_schema","2"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_name","3"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_catalog","1"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_schema","2"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_name","3"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","column_name","4"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_catalog","1"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_schema","2"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_name","3"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_catalog","1"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_schema","2"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_name","3"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_catalog","1"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_schema","2"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_name","3"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","column_name","4"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_catalog","1"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_schema","2"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_name","3"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_catalog","4"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_schema","5"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_name","6"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","column_name","7"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_catalog","1"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_schema","2"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_name","3"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_catalog","1"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_schema","2"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_name","3"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","column_name","4"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_catalog","1"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_schema","2"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_name","3"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_catalog","1"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_schema","2"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_name","3"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_catalog","1"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_schema","2"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_name","3"
-"meta","public","_parameters_pkey","meta","public","_parameters","ordinal_position","4"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_catalog","1"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_schema","2"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_name","3"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_catalog","1"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_schema","2"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_name","3"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","column_name","4"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","ordinal_position","5"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_catalog","1"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_schema","2"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_name","3"
+"meta","pub","_attributes_pkey","meta","pub","_attributes","att_name","1"
+"meta","pub","_schemata_pkey","meta","pub","_schemata","catalog_name","1"
+"meta","pub","_schemata_pkey","meta","pub","_schemata","schema_name","2"
+"meta","pub","_builtin_data_types_pkey","meta","pub","_builtin_data_types","full_type_name","1"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_catalog","1"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_schema","2"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_name","3"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_catalog","1"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_schema","2"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_name","3"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_column","4"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_catalog","1"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_schema","2"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_name","3"
+"meta","pub","_enums_pkey","meta","pub","_enums","label","4"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_catalog","1"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_schema","2"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_name","3"
+"meta","pub","_element_types_pkey","meta","pub","_element_types","specific_name","1"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_catalog","1"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_schema","2"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_name","3"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_catalog","1"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_schema","2"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_name","3"
+"meta","pub","_views_pkey","meta","pub","_views","table_catalog","1"
+"meta","pub","_views_pkey","meta","pub","_views","table_schema","2"
+"meta","pub","_views_pkey","meta","pub","_views","table_name","3"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_catalog","1"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_schema","2"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_name","3"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_catalog","1"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_schema","2"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_name","3"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_catalog","1"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_schema","2"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_name","3"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_catalog","1"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_schema","2"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_name","3"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_catalog","1"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_schema","2"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_name","3"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_catalog","1"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_schema","2"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_name","3"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_catalog","4"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_schema","5"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_table","6"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_manipulation","7"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_catalog","1"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_schema","2"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_table","3"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_catalog","1"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_schema","2"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_name","3"
+"meta","pub","_columns_pkey","meta","pub","_columns","column_name","4"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_catalog","1"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_schema","2"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_name","3"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_catalog","1"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_schema","2"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_name","3"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_catalog","1"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_schema","2"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_name","3"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_catalog","1"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_schema","2"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_name","3"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_catalog","1"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_schema","2"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_name","3"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_catalog","1"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_schema","2"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_name","3"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_catalog","1"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_schema","2"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_name","3"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_catalog","1"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_schema","2"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_name","3"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_catalog","1"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_schema","2"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_name","3"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","ordinal_position","4"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_catalog","1"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_schema","2"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_name","3"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_catalog","1"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_schema","2"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_name","3"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","column_name","4"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_catalog","1"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_schema","2"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_name","3"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_catalog","1"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_schema","2"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_name","3"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_catalog","1"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_schema","2"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_name","3"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","column_name","4"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_catalog","1"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_schema","2"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_name","3"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_catalog","4"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_schema","5"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_name","6"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","column_name","7"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_catalog","1"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_schema","2"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_name","3"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_catalog","1"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_schema","2"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_name","3"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","column_name","4"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_catalog","1"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_schema","2"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_name","3"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_catalog","1"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_schema","2"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_name","3"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_catalog","1"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_schema","2"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_name","3"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","ordinal_position","4"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_catalog","1"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_schema","2"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_name","3"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_catalog","1"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_schema","2"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_name","3"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","column_name","4"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","ordinal_position","5"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_catalog","1"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_schema","2"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_name","3"
diff --git a/tests/meta-store/data_referential_constraints.csv b/tests/meta-store/data_referential_constraints.csv
index 2f5da29..06d40ed 100644
--- a/tests/meta-store/data_referential_constraints.csv
+++ b/tests/meta-store/data_referential_constraints.csv
@@ -1,19 +1,19 @@
-"meta","public","_enums_udt","_enums_udt_catalog_fkey","meta","public","_udt","_udt_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_views","_views_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_character_sets","_character_sets_default_collate_catalog_fkey","meta","public","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_triggers","_triggers_event_object_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_character_set_catalog_fkey","meta","public","_character_sets","_character_sets_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_collation_catalog_fkey","meta","public","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_table_constraints","_table_constraints_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_referential_constraints","_referential_constraints_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_referential_constraints,"_referential_constraints_unique_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_key_column_usage","_key_column_usage_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_key_column_usage","_key_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_check_column_usage","_check_column_usage_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_check_column_usage","_check_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_view_column_usage","_view_column_usage_view_catalog_fkey","meta","public","_views","_views_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_view_column_usage","_view_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","domain_constraints","_domain_constraints_domain_catalog_fkey","meta","public","_domains","_domains_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_parameters","_parameters_specific_catalog_fkey","meta","public","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_routine_columns","_routine_columns_specific_catalog_fkey","meta","public","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_enums_udt","_enums_udt_catalog_fkey","meta","pub","_udt","_udt_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_views","_views_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_character_sets","_character_sets_default_collate_catalog_fkey","meta","pub","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_triggers","_triggers_event_object_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_character_set_catalog_fkey","meta","pub","_character_sets","_character_sets_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_collation_catalog_fkey","meta","pub","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_table_constraints","_table_constraints_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_referential_constraints","_referential_constraints_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_referential_constraints,"_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_key_column_usage","_key_column_usage_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_key_column_usage","_key_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_check_column_usage","_check_column_usage_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_check_column_usage","_check_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_view_column_usage","_view_column_usage_view_catalog_fkey","meta","pub","_views","_views_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_view_column_usage","_view_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","domain_constraints","_domain_constraints_domain_catalog_fkey","meta","pub","_domains","_domains_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_parameters","_parameters_specific_catalog_fkey","meta","pub","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_routine_columns","_routine_columns_specific_catalog_fkey","meta","pub","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
diff --git a/tests/meta-store/data_schemata.csv b/tests/meta-store/data_schemata.csv
index 89278cb..973c88d 100644
--- a/tests/meta-store/data_schemata.csv
+++ b/tests/meta-store/data_schemata.csv
@@ -1,3 +1,3 @@
 "meta","pg_catalog","a user",TRUE
-"meta","public","postgres",FALSE
+"meta","pub","postgres",FALSE
 "meta","information_schema","postgres",TRUE
diff --git a/tests/meta-store/data_table_constraints.csv b/tests/meta-store/data_table_constraints.csv
index 2f00177..932f648 100644
--- a/tests/meta-store/data_table_constraints.csv
+++ b/tests/meta-store/data_table_constraints.csv
@@ -1,194 +1,194 @@
-"meta","public","""2200_78469_1_not_null""","meta","public","_attributes","CHECK","att_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78469_2_not_null""","meta","public","_attributes","CHECK","att_value IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78476_1_not_null""","meta","public","_information_schema_catalog_name","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_1_not_null""","meta","public","_builtin_data_types","CHECK","short_type_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_2_not_null""","meta","public","_builtin_data_types","CHECK","full_type_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_6_not_null""","meta","public","_builtin_data_types","CHECK","internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_1_not_null""","meta","public","_udt","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_2_not_null""","meta","public","_udt","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_3_not_null""","meta","public","_udt","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_6_not_null""","meta","public","_udt","CHECK","udt_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_7_not_null""","meta","public","_udt","CHECK","udt_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_8_not_null""","meta","public","_udt","CHECK","udt_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_1_not_null""","meta","public","_element_types","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_2_not_null""","meta","public","_element_types","CHECK","object_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_3_not_null""","meta","public","_element_types","CHECK","object_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_4_not_null""","meta","public","_element_types","CHECK","object_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_6_not_null""","meta","public","_element_types","CHECK","object_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_7_not_null""","meta","public","_element_types","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_8_not_null""","meta","public","_element_types","CHECK","min_cardinality IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_9_not_null""","meta","public","_element_types","CHECK","max_cardinality IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_1_not_null""","meta","public","_schemata","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_2_not_null""","meta","public","_schemata","CHECK","schema_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_4_not_null""","meta","public","_schemata","CHECK","schema_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_11_not_null""","meta","public","_udt_columns","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_12_not_null""","meta","public","_udt_columns","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_13_not_null""","meta","public","_udt_columns","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_14_not_null""","meta","public","_udt_columns","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_15_not_null""","meta","public","_udt_columns","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_16_not_null""","meta","public","_udt_columns","CHECK","collation_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_1_not_null""","meta","public","_udt_columns","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_2_not_null""","meta","public","_udt_columns","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_3_not_null""","meta","public","_udt_columns","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_4_not_null""","meta","public","_udt_columns","CHECK","udt_column IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_5_not_null""","meta","public","_udt_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_1_not_null""","meta","public","_enums","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_2_not_null""","meta","public","_enums","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_3_not_null""","meta","public","_enums","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_4_not_null""","meta","public","_enums","CHECK","label IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_18_not_null""","meta","public","_domains","CHECK","domain_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_19_not_null""","meta","public","_domains","CHECK","domain_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_1_not_null""","meta","public","_domains","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_20_not_null""","meta","public","_domains","CHECK","domain_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_2_not_null""","meta","public","_domains","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_3_not_null""","meta","public","_domains","CHECK","domain_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_1_not_null""","meta","public","_tables","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_2_not_null""","meta","public","_tables","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_3_not_null""","meta","public","_tables","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_4_not_null""","meta","public","_tables","CHECK","table_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_7_not_null""","meta","public","_tables","CHECK","table_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_8_not_null""","meta","public","_tables","CHECK","table_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_1_not_null""","meta","public","_collations","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_2_not_null""","meta","public","_collations","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_3_not_null""","meta","public","_collations","CHECK","collation_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_5_not_null""","meta","public","_collations","CHECK","collation_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_6_not_null""","meta","public","_collations","CHECK","collation_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_19_not_null""","meta","public","_routines","CHECK","routine_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_1_not_null""","meta","public","_routines","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_20_not_null""","meta","public","_routines","CHECK","routine_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_2_not_null""","meta","public","_routines","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_3_not_null""","meta","public","_routines","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_6_not_null""","meta","public","_routines","CHECK","routine_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_9_not_null""","meta","public","_routines","CHECK","returns_set IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_1_not_null""","meta","public","_views","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_2_not_null""","meta","public","_views","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_3_not_null""","meta","public","_views","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_1_not_null""","meta","public","_character_sets","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_2_not_null""","meta","public","_character_sets","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_3_not_null""","meta","public","_character_sets","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_8_not_null""","meta","public","_character_sets","CHECK","character_set_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_9_not_null""","meta","public","_character_sets","CHECK","character_set_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_10_not_null""","meta","public","_triggers","CHECK","condition_timing IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_12_not_null""","meta","public","_triggers","CHECK","trigger_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_13_not_null""","meta","public","_triggers","CHECK","trigger_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_1_not_null""","meta","public","_triggers","CHECK","trigger_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_2_not_null""","meta","public","_triggers","CHECK","trigger_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_3_not_null""","meta","public","_triggers","CHECK","trigger_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_4_not_null""","meta","public","_triggers","CHECK","event_manipulation IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_5_not_null""","meta","public","_triggers","CHECK","event_object_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_6_not_null""","meta","public","_triggers","CHECK","event_object_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_7_not_null""","meta","public","_triggers","CHECK","event_object_table IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_9_not_null""","meta","public","_triggers","CHECK","action_orientation IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_1_not_null""","meta","public","_table_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_2_not_null""","meta","public","_table_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_3_not_null""","meta","public","_table_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_4_not_null""","meta","public","_table_constraints","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_5_not_null""","meta","public","_table_constraints","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_6_not_null""","meta","public","_table_constraints","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_7_not_null""","meta","public","_table_constraints","CHECK","constraint_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_1_not_null""","meta","public","_domain_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_2_not_null""","meta","public","_domain_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_3_not_null""","meta","public","_domain_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_4_not_null""","meta","public","_domain_constraints","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_5_not_null""","meta","public","_domain_constraints","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_6_not_null""","meta","public","_domain_constraints","CHECK","domain_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_1_not_null""","meta","public","_parameters","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_2_not_null""","meta","public","_parameters","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_3_not_null""","meta","public","_parameters","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_4_not_null""","meta","public","_parameters","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_5_not_null""","meta","public","_parameters","CHECK","parameter_mode IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_7_not_null""","meta","public","_parameters","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_1_not_null""","meta","public","_routine_columns","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_2_not_null""","meta","public","_routine_columns","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_3_not_null""","meta","public","_routine_columns","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_4_not_null""","meta","public","_routine_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_5_not_null""","meta","public","_routine_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_6_not_null""","meta","public","_routine_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_1_not_null""","meta","public","_columns","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_2_not_null""","meta","public","_columns","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_3_not_null""","meta","public","_columns","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_4_not_null""","meta","public","_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_5_not_null""","meta","public","_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_7_not_null""","meta","public","_columns","CHECK","is_nullable IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_8_not_null""","meta","public","_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_1_not_null""","meta","public","_referential_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_2_not_null""","meta","public","_referential_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_3_not_null""","meta","public","_referential_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_4_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_5_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_6_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_1_not_null""","meta","public","_key_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_2_not_null""","meta","public","_key_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_3_not_null""","meta","public","_key_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_4_not_null""","meta","public","_key_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_5_not_null""","meta","public","_key_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_6_not_null""","meta","public","_key_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_7_not_null""","meta","public","_key_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_8_not_null""","meta","public","_key_column_usage","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_1_not_null""","meta","public","_check_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_2_not_null""","meta","public","_check_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_3_not_null""","meta","public","_check_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_4_not_null""","meta","public","_check_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_5_not_null""","meta","public","_check_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_6_not_null""","meta","public","_check_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_7_not_null""","meta","public","_check_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_1_not_null""","meta","public","_view_column_usage","CHECK","view_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_2_not_null""","meta","public","_view_column_usage","CHECK","view_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_3_not_null""","meta","public","_view_column_usage","CHECK","view_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_4_not_null""","meta","public","_view_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_5_not_null""","meta","public","_view_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_6_not_null""","meta","public","_view_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_7_not_null""","meta","public","_view_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","_attributes_pkey","meta","public","_attributes","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_builtin_data_types_pkey","meta","public","_builtin_data_types","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_character_set_catalog_fkey","meta","public","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_pkey","meta","public","_character_sets","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_collations_collation_catalog_fkey","meta","public","_collations","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_collations_pkey","meta","public","_collations","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_columns_pkey","meta","public","_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_constraint_catalog_fkey","meta","public","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_domains_domain_catalog_fkey","meta","public","_domains","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domains_pkey","meta","public","_domains","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_element_types_pkey","meta","public","_element_types","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_enums_pkey","meta","public","_enums","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_information_schema_catalog_name_pkey","meta","public","_information_schema_catalog_name","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_parameters_pkey","meta","public","_parameters","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_routines_pkey","meta","public","_routines","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_routines_specific_catalog_fkey","meta","public","_routines","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_schemata_catalog_name_fkey","meta","public","_schemata","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_schemata_pkey","meta","public","_schemata","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_constraint_catalog_fkey","meta","public","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_tables_pkey","meta","public","_tables","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_tables_table_catalog_fkey","meta","public","_tables","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_pkey","meta","public","_triggers","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_trigger_catalog_fkey","meta","public","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_udt_columns_udt_catalog_fkey","meta","public","_udt_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_udt_pkey","meta","public","_udt","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_views_pkey","meta","public","_views","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_views_table_catalog_fkey","meta","public","_views","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","""2200_78469_1_not_null""","meta","pub","_attributes","CHECK","att_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78469_2_not_null""","meta","pub","_attributes","CHECK","att_value IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78476_1_not_null""","meta","pub","_information_schema_catalog_name","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_1_not_null""","meta","pub","_builtin_data_types","CHECK","short_type_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_2_not_null""","meta","pub","_builtin_data_types","CHECK","full_type_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_6_not_null""","meta","pub","_builtin_data_types","CHECK","internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_1_not_null""","meta","pub","_udt","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_2_not_null""","meta","pub","_udt","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_3_not_null""","meta","pub","_udt","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_6_not_null""","meta","pub","_udt","CHECK","udt_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_7_not_null""","meta","pub","_udt","CHECK","udt_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_8_not_null""","meta","pub","_udt","CHECK","udt_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_1_not_null""","meta","pub","_element_types","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_2_not_null""","meta","pub","_element_types","CHECK","object_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_3_not_null""","meta","pub","_element_types","CHECK","object_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_4_not_null""","meta","pub","_element_types","CHECK","object_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_6_not_null""","meta","pub","_element_types","CHECK","object_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_7_not_null""","meta","pub","_element_types","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_8_not_null""","meta","pub","_element_types","CHECK","min_cardinality IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_9_not_null""","meta","pub","_element_types","CHECK","max_cardinality IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_1_not_null""","meta","pub","_schemata","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_2_not_null""","meta","pub","_schemata","CHECK","schema_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_4_not_null""","meta","pub","_schemata","CHECK","schema_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_11_not_null""","meta","pub","_udt_columns","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_12_not_null""","meta","pub","_udt_columns","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_13_not_null""","meta","pub","_udt_columns","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_14_not_null""","meta","pub","_udt_columns","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_15_not_null""","meta","pub","_udt_columns","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_16_not_null""","meta","pub","_udt_columns","CHECK","collation_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_1_not_null""","meta","pub","_udt_columns","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_2_not_null""","meta","pub","_udt_columns","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_3_not_null""","meta","pub","_udt_columns","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_4_not_null""","meta","pub","_udt_columns","CHECK","udt_column IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_5_not_null""","meta","pub","_udt_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_1_not_null""","meta","pub","_enums","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_2_not_null""","meta","pub","_enums","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_3_not_null""","meta","pub","_enums","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_4_not_null""","meta","pub","_enums","CHECK","label IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_18_not_null""","meta","pub","_domains","CHECK","domain_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_19_not_null""","meta","pub","_domains","CHECK","domain_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_1_not_null""","meta","pub","_domains","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_20_not_null""","meta","pub","_domains","CHECK","domain_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_2_not_null""","meta","pub","_domains","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_3_not_null""","meta","pub","_domains","CHECK","domain_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_1_not_null""","meta","pub","_tables","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_2_not_null""","meta","pub","_tables","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_3_not_null""","meta","pub","_tables","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_4_not_null""","meta","pub","_tables","CHECK","table_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_7_not_null""","meta","pub","_tables","CHECK","table_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_8_not_null""","meta","pub","_tables","CHECK","table_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_1_not_null""","meta","pub","_collations","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_2_not_null""","meta","pub","_collations","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_3_not_null""","meta","pub","_collations","CHECK","collation_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_5_not_null""","meta","pub","_collations","CHECK","collation_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_6_not_null""","meta","pub","_collations","CHECK","collation_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_19_not_null""","meta","pub","_routines","CHECK","routine_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_1_not_null""","meta","pub","_routines","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_20_not_null""","meta","pub","_routines","CHECK","routine_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_2_not_null""","meta","pub","_routines","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_3_not_null""","meta","pub","_routines","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_6_not_null""","meta","pub","_routines","CHECK","routine_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_9_not_null""","meta","pub","_routines","CHECK","returns_set IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_1_not_null""","meta","pub","_views","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_2_not_null""","meta","pub","_views","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_3_not_null""","meta","pub","_views","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_1_not_null""","meta","pub","_character_sets","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_2_not_null""","meta","pub","_character_sets","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_3_not_null""","meta","pub","_character_sets","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_8_not_null""","meta","pub","_character_sets","CHECK","character_set_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_9_not_null""","meta","pub","_character_sets","CHECK","character_set_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_10_not_null""","meta","pub","_triggers","CHECK","condition_timing IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_12_not_null""","meta","pub","_triggers","CHECK","trigger_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_13_not_null""","meta","pub","_triggers","CHECK","trigger_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_1_not_null""","meta","pub","_triggers","CHECK","trigger_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_2_not_null""","meta","pub","_triggers","CHECK","trigger_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_3_not_null""","meta","pub","_triggers","CHECK","trigger_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_4_not_null""","meta","pub","_triggers","CHECK","event_manipulation IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_5_not_null""","meta","pub","_triggers","CHECK","event_object_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_6_not_null""","meta","pub","_triggers","CHECK","event_object_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_7_not_null""","meta","pub","_triggers","CHECK","event_object_table IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_9_not_null""","meta","pub","_triggers","CHECK","action_orientation IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_1_not_null""","meta","pub","_table_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_2_not_null""","meta","pub","_table_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_3_not_null""","meta","pub","_table_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_4_not_null""","meta","pub","_table_constraints","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_5_not_null""","meta","pub","_table_constraints","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_6_not_null""","meta","pub","_table_constraints","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_7_not_null""","meta","pub","_table_constraints","CHECK","constraint_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_1_not_null""","meta","pub","_domain_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_2_not_null""","meta","pub","_domain_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_3_not_null""","meta","pub","_domain_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_4_not_null""","meta","pub","_domain_constraints","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_5_not_null""","meta","pub","_domain_constraints","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_6_not_null""","meta","pub","_domain_constraints","CHECK","domain_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_1_not_null""","meta","pub","_parameters","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_2_not_null""","meta","pub","_parameters","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_3_not_null""","meta","pub","_parameters","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_4_not_null""","meta","pub","_parameters","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_5_not_null""","meta","pub","_parameters","CHECK","parameter_mode IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_7_not_null""","meta","pub","_parameters","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_1_not_null""","meta","pub","_routine_columns","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_2_not_null""","meta","pub","_routine_columns","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_3_not_null""","meta","pub","_routine_columns","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_4_not_null""","meta","pub","_routine_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_5_not_null""","meta","pub","_routine_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_6_not_null""","meta","pub","_routine_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_1_not_null""","meta","pub","_columns","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_2_not_null""","meta","pub","_columns","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_3_not_null""","meta","pub","_columns","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_4_not_null""","meta","pub","_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_5_not_null""","meta","pub","_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_7_not_null""","meta","pub","_columns","CHECK","is_nullable IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_8_not_null""","meta","pub","_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_1_not_null""","meta","pub","_referential_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_2_not_null""","meta","pub","_referential_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_3_not_null""","meta","pub","_referential_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_4_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_5_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_6_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_1_not_null""","meta","pub","_key_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_2_not_null""","meta","pub","_key_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_3_not_null""","meta","pub","_key_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_4_not_null""","meta","pub","_key_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_5_not_null""","meta","pub","_key_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_6_not_null""","meta","pub","_key_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_7_not_null""","meta","pub","_key_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_8_not_null""","meta","pub","_key_column_usage","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_1_not_null""","meta","pub","_check_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_2_not_null""","meta","pub","_check_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_3_not_null""","meta","pub","_check_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_4_not_null""","meta","pub","_check_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_5_not_null""","meta","pub","_check_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_6_not_null""","meta","pub","_check_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_7_not_null""","meta","pub","_check_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_1_not_null""","meta","pub","_view_column_usage","CHECK","view_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_2_not_null""","meta","pub","_view_column_usage","CHECK","view_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_3_not_null""","meta","pub","_view_column_usage","CHECK","view_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_4_not_null""","meta","pub","_view_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_5_not_null""","meta","pub","_view_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_6_not_null""","meta","pub","_view_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_7_not_null""","meta","pub","_view_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","_attributes_pkey","meta","pub","_attributes","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_builtin_data_types_pkey","meta","pub","_builtin_data_types","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_character_set_catalog_fkey","meta","pub","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_collations_collation_catalog_fkey","meta","pub","_collations","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_collations_pkey","meta","pub","_collations","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_pkey","meta","pub","_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_constraint_catalog_fkey","meta","pub","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_domains_domain_catalog_fkey","meta","pub","_domains","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domains_pkey","meta","pub","_domains","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_element_types_pkey","meta","pub","_element_types","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_enums_pkey","meta","pub","_enums","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_information_schema_catalog_name_pkey","meta","pub","_information_schema_catalog_name","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_parameters_pkey","meta","pub","_parameters","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_routines_pkey","meta","pub","_routines","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_routines_specific_catalog_fkey","meta","pub","_routines","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_schemata_catalog_name_fkey","meta","pub","_schemata","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_schemata_pkey","meta","pub","_schemata","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_constraint_catalog_fkey","meta","pub","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_tables_pkey","meta","pub","_tables","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_tables_table_catalog_fkey","meta","pub","_tables","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_pkey","meta","pub","_triggers","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_trigger_catalog_fkey","meta","pub","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_columns_udt_catalog_fkey","meta","pub","_udt_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_pkey","meta","pub","_udt","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_views_pkey","meta","pub","_views","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","FOREIGN KEY","NULL",FALSE,FALSE
diff --git a/tests/meta-store/data_tables.csv b/tests/meta-store/data_tables.csv
index 9b6f34c..8edf0b5 100644
--- a/tests/meta-store/data_tables.csv
+++ b/tests/meta-store/data_tables.csv
@@ -1,35 +1,35 @@
 "meta","pg_catalog","pg_stats","VIEW",FALSE,"NULL","pg_stats","pg_catalog.pg_stats","postgres"
 "meta","pg_catalog","pg_locks","VIEW",FALSE,"NULL","pg_locks","pg_catalog.pg_locks","postgres"
-"meta","public","_attributes","BASE TABLE",TRUE,"NULL","_attributes","public._attributes","postgres"
-"meta","public","_information_schema_catalog_name","BASE TABLE",TRUE,"NULL","_information_schema_catalog_name","public._information_schema_catalog_name","postgres"
-"meta","public","_schemata","BASE TABLE",TRUE,"NULL","_schemata","public._schemata","postgres"
-"meta","public","_builtin_data_types","BASE TABLE",TRUE,"NULL","_builtin_data_types","public._builtin_data_types","postgres"
-"meta","public","_udt_columns","BASE TABLE",TRUE,"NULL","_udt_columns","public._udt_columns","postgres"
-"meta","public","_enums","BASE TABLE",TRUE,"NULL","_enums","public._enums","postgres"
-"meta","public","_udt","BASE TABLE",TRUE,"NULL","_udt","public._udt","postgres"
-"meta","public","_element_types","BASE TABLE",TRUE,"NULL","_element_types","public._element_types","postgres"
-"meta","public","_all_types","VIEW",FALSE,"NULL","_all_types","public._all_types","postgres"
-"meta","public","_triggers","BASE TABLE",TRUE,"NULL","_triggers","public._triggers","postgres"
-"meta","public","_character_sets","BASE TABLE",TRUE,"NULL","_character_sets","public._character_sets","postgres"
-"meta","public","_collations","BASE TABLE",TRUE,"NULL","_collations","public._collations","postgres"
-"meta","public","_referential_constraints","BASE TABLE",TRUE,"NULL","_referential_constraints","public._referential_constraints","postgres"
-"meta","public","_check_constraints","BASE TABLE",TRUE,"NULL","_check_constraints","public._check_constraints","postgres"
-"meta","public","_key_column_usage","BASE TABLE",TRUE,"NULL","_key_column_usage","public._key_column_usage","postgres"
-"meta","public","_table_constraints","BASE TABLE",TRUE,"NULL","_table_constraints","public._table_constraints","postgres"
-"meta","public","_check_column_usage","BASE TABLE",TRUE,"NULL","_check_column_usage","public._check_column_usage","postgres"
-"meta","public","_constraint_column_usage","VIEW",FALSE,"NULL","_constraint_column_usage","public._constraint_column_usage","postgres"
-"meta","public","_constraint_table_usage","VIEW",FALSE,"NULL","_constraint_table_usage","public._constraint_table_usage","postgres"
-"meta","public","_views","BASE TABLE",TRUE,"NULL","_views","public._views","postgres"
-"meta","public","_view_column_usage","BASE TABLE",TRUE,"NULL","_view_column_usage","public._view_column_usage","postgres"
-"meta","public","_view_table_usage","VIEW",FALSE,"NULL","_view_table_usage","public._view_table_usage","postgres"
-"meta","public","_domain_constraints","BASE TABLE",TRUE,"NULL","_domain_constraints","public._domain_constraints","postgres"
-"meta","public","_domains","BASE TABLE",TRUE,"NULL","_domains","public._domains","postgres"
-"meta","public","_domain_column_usage","VIEW",FALSE,"NULL","_domain_column_usage","public._domain_column_usage","postgres"
-"meta","public","_parameters","BASE TABLE",TRUE,"NULL","_parameters","public._parameters","postgres"
-"meta","public","_routine_columns","BASE TABLE",TRUE,"NULL","_routine_columns","public._routine_columns","postgres"
-"meta","public","_routines","BASE TABLE",TRUE,"NULL","_routines","public._routines","postgres"
-"meta","public","_table_privileges","BASE TABLE",TRUE,"NULL","_table_privileges","public._table_privileges","postgres"
-"meta","public","_tables","BASE TABLE",TRUE,"NULL","_tables","public._tables","postgres"
-"meta","public","_column_privileges","BASE TABLE",TRUE,"NULL","_column_privileges","public._column_privileges","postgres"
-"meta","public","_columns","BASE TABLE",TRUE,"NULL","_columns","public._columns","postgres"
-"meta","public","_usage_privileges","BASE TABLE",TRUE,"NULL","_usage_privileges","public._usage_privileges","postgres"
+"meta","pub","_attributes","BASE TABLE",TRUE,"NULL","_attributes","pub._attributes","postgres"
+"meta","pub","_information_schema_catalog_name","BASE TABLE",TRUE,"NULL","_information_schema_catalog_name","pub._information_schema_catalog_name","postgres"
+"meta","pub","_schemata","BASE TABLE",TRUE,"NULL","_schemata","pub._schemata","postgres"
+"meta","pub","_builtin_data_types","BASE TABLE",TRUE,"NULL","_builtin_data_types","pub._builtin_data_types","postgres"
+"meta","pub","_udt_columns","BASE TABLE",TRUE,"NULL","_udt_columns","pub._udt_columns","postgres"
+"meta","pub","_enums","BASE TABLE",TRUE,"NULL","_enums","pub._enums","postgres"
+"meta","pub","_udt","BASE TABLE",TRUE,"NULL","_udt","pub._udt","postgres"
+"meta","pub","_element_types","BASE TABLE",TRUE,"NULL","_element_types","pub._element_types","postgres"
+"meta","pub","_all_types","VIEW",FALSE,"NULL","_all_types","pub._all_types","postgres"
+"meta","pub","_triggers","BASE TABLE",TRUE,"NULL","_triggers","pub._triggers","postgres"
+"meta","pub","_character_sets","BASE TABLE",TRUE,"NULL","_character_sets","pub._character_sets","postgres"
+"meta","pub","_collations","BASE TABLE",TRUE,"NULL","_collations","pub._collations","postgres"
+"meta","pub","_referential_constraints","BASE TABLE",TRUE,"NULL","_referential_constraints","pub._referential_constraints","postgres"
+"meta","pub","_check_constraints","BASE TABLE",TRUE,"NULL","_check_constraints","pub._check_constraints","postgres"
+"meta","pub","_key_column_usage","BASE TABLE",TRUE,"NULL","_key_column_usage","pub._key_column_usage","postgres"
+"meta","pub","_table_constraints","BASE TABLE",TRUE,"NULL","_table_constraints","pub._table_constraints","postgres"
+"meta","pub","_check_column_usage","BASE TABLE",TRUE,"NULL","_check_column_usage","pub._check_column_usage","postgres"
+"meta","pub","_constraint_column_usage","VIEW",FALSE,"NULL","_constraint_column_usage","pub._constraint_column_usage","postgres"
+"meta","pub","_constraint_table_usage","VIEW",FALSE,"NULL","_constraint_table_usage","pub._constraint_table_usage","postgres"
+"meta","pub","_views","BASE TABLE",TRUE,"NULL","_views","pub._views","postgres"
+"meta","pub","_view_column_usage","BASE TABLE",TRUE,"NULL","_view_column_usage","pub._view_column_usage","postgres"
+"meta","pub","_view_table_usage","VIEW",FALSE,"NULL","_view_table_usage","pub._view_table_usage","postgres"
+"meta","pub","_domain_constraints","BASE TABLE",TRUE,"NULL","_domain_constraints","pub._domain_constraints","postgres"
+"meta","pub","_domains","BASE TABLE",TRUE,"NULL","_domains","pub._domains","postgres"
+"meta","pub","_domain_column_usage","VIEW",FALSE,"NULL","_domain_column_usage","pub._domain_column_usage","postgres"
+"meta","pub","_parameters","BASE TABLE",TRUE,"NULL","_parameters","pub._parameters","postgres"
+"meta","pub","_routine_columns","BASE TABLE",TRUE,"NULL","_routine_columns","pub._routine_columns","postgres"
+"meta","pub","_routines","BASE TABLE",TRUE,"NULL","_routines","pub._routines","postgres"
+"meta","pub","_table_privileges","BASE TABLE",TRUE,"NULL","_table_privileges","pub._table_privileges","postgres"
+"meta","pub","_tables","BASE TABLE",TRUE,"NULL","_tables","pub._tables","postgres"
+"meta","pub","_column_privileges","BASE TABLE",TRUE,"NULL","_column_privileges","pub._column_privileges","postgres"
+"meta","pub","_columns","BASE TABLE",TRUE,"NULL","_columns","pub._columns","postgres"
+"meta","pub","_usage_privileges","BASE TABLE",TRUE,"NULL","_usage_privileges","pub._usage_privileges","postgres"
diff --git a/tests/meta-store/data_view_column_usage.csv b/tests/meta-store/data_view_column_usage.csv
index 8d3db3b..b1c85e4 100644
--- a/tests/meta-store/data_view_column_usage.csv
+++ b/tests/meta-store/data_view_column_usage.csv
@@ -1,56 +1,56 @@
-"meta","public","_all_types","meta","public","_builtin_data_types","comments"
-"meta","public","_all_types","meta","public","_builtin_data_types","full_type_name"
-"meta","public","_all_types","meta","public","_builtin_data_types","gtype"
-"meta","public","_all_types","meta","public","_builtin_data_types","internal"
-"meta","public","_all_types","meta","public","_builtin_data_types","short_type_name"
-"meta","public","_all_types","meta","public","_domains","domain_catalog"
-"meta","public","_all_types","meta","public","_domains","domain_comments"
-"meta","public","_all_types","meta","public","_domains","domain_full_name"
-"meta","public","_all_types","meta","public","_domains","domain_gtype"
-"meta","public","_all_types","meta","public","_domains","domain_internal"
-"meta","public","_all_types","meta","public","_domains","domain_name"
-"meta","public","_all_types","meta","public","_domains","domain_schema"
-"meta","public","_all_types","meta","public","_domains","domain_short_name"
-"meta","public","_all_types","meta","public","_udt","udt_catalog"
-"meta","public","_all_types","meta","public","_udt","udt_comments"
-"meta","public","_all_types","meta","public","_udt","udt_full_name"
-"meta","public","_all_types","meta","public","_udt","udt_gtype"
-"meta","public","_all_types","meta","public","_udt","udt_internal"
-"meta","public","_all_types","meta","public","_udt","udt_name"
-"meta","public","_all_types","meta","public","_udt","udt_schema"
-"meta","public","_all_types","meta","public","_udt","udt_short_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","column_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_catalog"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_schema"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_catalog"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_schema"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","column_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_catalog"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_schema"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_catalog"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_schema"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_catalog"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_name"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_schema"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_catalog"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_name"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_schema"
-"meta","public","_domain_column_usage","meta","public","_columns","column_name"
-"meta","public","_domain_column_usage","meta","public","_columns","data_type"
-"meta","public","_domain_column_usage","meta","public","_columns","table_catalog"
-"meta","public","_domain_column_usage","meta","public","_columns","table_name"
-"meta","public","_domain_column_usage","meta","public","_columns","table_schema"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_catalog"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_full_name"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_name"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_schema"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_catalog"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_name"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_schema"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_catalog"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_name"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_schema"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","comments"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","full_type_name"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","gtype"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","internal"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","short_type_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_catalog"
+"meta","pub","_all_types","meta","pub","_domains","domain_comments"
+"meta","pub","_all_types","meta","pub","_domains","domain_full_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_gtype"
+"meta","pub","_all_types","meta","pub","_domains","domain_internal"
+"meta","pub","_all_types","meta","pub","_domains","domain_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_schema"
+"meta","pub","_all_types","meta","pub","_domains","domain_short_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_catalog"
+"meta","pub","_all_types","meta","pub","_udt","udt_comments"
+"meta","pub","_all_types","meta","pub","_udt","udt_full_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_gtype"
+"meta","pub","_all_types","meta","pub","_udt","udt_internal"
+"meta","pub","_all_types","meta","pub","_udt","udt_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_schema"
+"meta","pub","_all_types","meta","pub","_udt","udt_short_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","column_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","column_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_schema"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_catalog"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_name"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_schema"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_catalog"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_name"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_schema"
+"meta","pub","_domain_column_usage","meta","pub","_columns","column_name"
+"meta","pub","_domain_column_usage","meta","pub","_columns","data_type"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_catalog"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_name"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_schema"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_catalog"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_full_name"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_name"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_schema"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_catalog"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_name"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_schema"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_catalog"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_name"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_schema"
diff --git a/tests/meta-store/data_views.csv b/tests/meta-store/data_views.csv
index 0c99bf2..9aff7a3 100644
--- a/tests/meta-store/data_views.csv
+++ b/tests/meta-store/data_views.csv
@@ -34,7 +34,7 @@
   WHERE has_table_privilege(c.oid, 'select'::text);","NULL",FALSE
 "meta","pg_catalog","pg_locks"," SELECT l.locktype, l.""database"", l.relation, l.page, l.tuple, l.transactionid, l.classid, l.objid, l.objsubid, l.""transaction"", l.pid, l.""mode"", l.""granted""
    FROM pg_lock_status() l(locktype text, ""database"" oid, relation oid, page integer, tuple smallint, transactionid xid, classid oid, objid oid, objsubid smallint, ""transaction"" xid, pid integer, ""mode"" text, ""granted"" boolean);","NULL",FALSE
-"meta","public","_all_types","( SELECT _builtin_data_types.short_type_name, _builtin_data_types.gtype, _builtin_data_types.full_type_name, _builtin_data_types.comments, _builtin_data_types.internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
+"meta","pub","_all_types","( SELECT _builtin_data_types.short_type_name, _builtin_data_types.gtype, _builtin_data_types.full_type_name, _builtin_data_types.comments, _builtin_data_types.internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
    FROM _builtin_data_types
 UNION 
  SELECT _udt.udt_short_name AS short_type_name, _udt.udt_gtype AS gtype, _udt.udt_full_name AS full_type_name, _udt.udt_comments AS comments, _udt.udt_internal AS internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, _udt.udt_catalog, _udt.udt_schema, _udt.udt_name
@@ -42,17 +42,17 @@ UNION
 UNION 
  SELECT _domains.domain_short_name AS short_type_name, _domains.domain_gtype AS gtype, _domains.domain_full_name AS full_type_name, _domains.domain_comments AS comments, _domains.domain_internal AS internal, _domains.domain_catalog, _domains.domain_schema, _domains.domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
    FROM _domains;","NULL",FALSE
-"meta","public","_constraint_column_usage"," SELECT _key_column_usage.table_catalog, _key_column_usage.table_schema, _key_column_usage.table_name, _key_column_usage.column_name, _key_column_usage.constraint_catalog, _key_column_usage.constraint_schema, _key_column_usage.constraint_name
+"meta","pub","_constraint_column_usage"," SELECT _key_column_usage.table_catalog, _key_column_usage.table_schema, _key_column_usage.table_name, _key_column_usage.column_name, _key_column_usage.constraint_catalog, _key_column_usage.constraint_schema, _key_column_usage.constraint_name
    FROM _key_column_usage
 UNION 
  SELECT _check_column_usage.table_catalog, _check_column_usage.table_schema, _check_column_usage.table_name, _check_column_usage.column_name, _check_column_usage.constraint_catalog, _check_column_usage.constraint_schema, _check_column_usage.constraint_name
    FROM _check_column_usage;","NULL",FALSE
-"meta","public","_constraint_table_usage"," SELECT DISTINCT _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name
+"meta","pub","_constraint_table_usage"," SELECT DISTINCT _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name
    FROM _constraint_column_usage
   ORDER BY _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name;","NULL",FALSE
-"meta","public","_view_table_usage"," SELECT DISTINCT _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name
+"meta","pub","_view_table_usage"," SELECT DISTINCT _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name
    FROM _view_column_usage
   ORDER BY _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name;","NULL",FALSE
-"meta","public","_domain_column_usage"," SELECT d.domain_catalog, d.domain_schema, d.domain_name, c.table_catalog, c.table_schema, c.table_name, c.column_name
+"meta","pub","_domain_column_usage"," SELECT d.domain_catalog, d.domain_schema, d.domain_name, c.table_catalog, c.table_schema, c.table_name, c.column_name
    FROM _domains d
    JOIN _columns c ON c.data_type::text = d.domain_full_name::text;","NULL",FALSE
diff --git a/tests/test-identifiers-quotes.c b/tests/test-identifiers-quotes.c
new file mode 100644
index 0000000..3e5078b
--- /dev/null
+++ b/tests/test-identifiers-quotes.c
@@ -0,0 +1,200 @@
+/* 
+ * Copyright (C) 2009 The GNOME Foundation.
+ *
+ * AUTHORS:
+ *      Vivien Malerba <malerba gnome-db org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <string.h>
+#include <libgda/libgda.h>
+
+typedef struct {
+	gchar *sql_identifier;
+	gchar *provider;
+	gboolean meta_store_convention;
+	gboolean force_quotes;
+	gchar *expected_result;
+} ATest;
+
+ATest tests[] = {
+	/* generic SQL */
+	{"\"Solution\"", NULL, FALSE, FALSE, "\"Solution\""},
+	{"\"Solution\"", NULL, FALSE, TRUE, "\"Solution\""},
+	{"\"solution\"", NULL, FALSE, FALSE, "\"solution\""},
+	{"\"solution\"", NULL, FALSE, TRUE, "\"solution\""},
+	{"solution", NULL, FALSE, FALSE, "solution"},
+	{"solution", NULL, FALSE, TRUE, "\"solution\""},
+	{"solution", NULL, TRUE, FALSE, "solution"},
+	{"solution", NULL, TRUE, TRUE, "\"solution\""},
+
+	{"SOLUTION", NULL, FALSE, TRUE, "\"SOLUTION\""},
+	{"SOLUTION", NULL, FALSE, FALSE, "SOLUTION"},
+
+	{"Solution", NULL, FALSE, FALSE, "Solution"}, /* mixed case */
+	{"Solution", NULL, FALSE, TRUE, "\"Solution\""},
+
+	{"5olution", NULL, FALSE, FALSE, "\"5olution\""}, /* test 1st digit */
+	{"5olution", NULL, FALSE, TRUE, "\"5olution\""},
+	{"5olution", NULL, TRUE, FALSE, "\"5olution\""}, /* this should not happen, but just in case */
+	{"5olution", NULL, TRUE, TRUE, "\"5olution\""}, /* this should not happen, but just in case */
+
+	{"$solu_t#ion", NULL, FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+	{"$solu_t#ion", NULL, FALSE, TRUE, "\"$solu_t#ion\""},
+	{"$solu_t#ion", NULL, TRUE, FALSE, "$solu_t#ion"},
+	{"$solu_t#ion", NULL, TRUE, TRUE, "\"$solu_t#ion\""},
+	
+	{"solu tion", NULL, FALSE, FALSE, "\"solu tion\""}, /* non allowed characters */
+	{"solu tion", NULL, FALSE, TRUE, "\"solu tion\""},
+	{"solu tion", NULL, TRUE, FALSE, "\"solu tion\""},
+	{"solu tion", NULL, TRUE, TRUE, "\"solu tion\""},
+
+	{"select", NULL, FALSE, FALSE, "\"select\""}, /* SQL reserved keyword */
+	{"select", NULL, FALSE, TRUE, "\"select\""},
+	{"select", NULL, TRUE, FALSE, "\"select\""},
+	{"select", NULL, TRUE, TRUE, "\"select\""},
+
+	/* MySQL specific */
+	{"`Solution`", "MySQL", FALSE, FALSE, "`Solution`"},
+	{"`Solution`", "MySQL", FALSE, TRUE, "`Solution`"},
+	{"`solution`", "MySQL", FALSE, FALSE, "`solution`"},
+	{"`solution`", "MySQL", FALSE, TRUE, "`solution`"},
+	{"solution", "MySQL", FALSE, FALSE, "solution"},
+	{"solution", "MySQL", FALSE, TRUE, "`solution`"},
+	{"solution", "MySQL", TRUE, FALSE, "solution"},
+	{"solution", "MySQL", TRUE, TRUE, "`solution`"},
+
+	{"SOLUTION", "MySQL", FALSE, TRUE, "`SOLUTION`"},
+	{"SOLUTION", "MySQL", FALSE, FALSE, "SOLUTION"},
+
+	{"Solution", "MySQL", FALSE, FALSE, "Solution"}, /* mixed case */
+	{"Solution", "MySQL", FALSE, TRUE, "`Solution`"},
+
+	{"5olution", "MySQL", FALSE, FALSE, "`5olution`"}, /* test 1st digit */
+	{"5olution", "MySQL", FALSE, TRUE, "`5olution`"},
+	{"5olution", "MySQL", TRUE, FALSE, "`5olution`"}, /* this should not happen, but just in case */
+	{"5olution", "MySQL", TRUE, TRUE, "`5olution`"}, /* this should not happen, but just in case */
+
+	{"$solu_t#ion", "MySQL", FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+	{"$solu_t#ion", "MySQL", FALSE, TRUE, "`$solu_t#ion`"},
+	{"$solu_t#ion", "MySQL", TRUE, FALSE, "$solu_t#ion"},
+	{"$solu_t#ion", "MySQL", TRUE, TRUE, "`$solu_t#ion`"},
+	
+	{"solu tion", "MySQL", FALSE, FALSE, "`solu tion`"}, /* non allowed characters */
+	{"solu tion", "MySQL", FALSE, TRUE, "`solu tion`"},
+	{"solu tion", "MySQL", TRUE, FALSE, "`solu tion`"},
+	{"solu tion", "MySQL", TRUE, TRUE, "`solu tion`"},
+
+	{"select", "MySQL", FALSE, FALSE, "`select`"}, /* SQL reserved keyword */
+	{"select", "MySQL", FALSE, TRUE, "`select`"},
+	{"select", "MySQL", TRUE, FALSE, "`select`"},
+	{"select", "MySQL", TRUE, TRUE, "`select`"},
+
+	/* PostgreSQL specific */
+	{"\"Solution\"", "PostgreSQL", FALSE, FALSE, "\"Solution\""},
+	{"\"Solution\"", "PostgreSQL", FALSE, TRUE, "\"Solution\""},
+	{"\"solution\"", "PostgreSQL", FALSE, FALSE, "\"solution\""},
+	{"\"solution\"", "PostgreSQL", FALSE, TRUE, "\"solution\""},
+	{"solution", "PostgreSQL", FALSE, FALSE, "solution"},
+	{"solution", "PostgreSQL", FALSE, TRUE, "\"solution\""},
+	{"solution", "PostgreSQL", TRUE, FALSE, "solution"},
+	{"solution", "PostgreSQL", TRUE, TRUE, "\"solution\""},
+
+	{"SOLUTION", "PostgreSQL", FALSE, TRUE, "\"SOLUTION\""},
+	{"SOLUTION", "PostgreSQL", FALSE, FALSE, "SOLUTION"},
+
+	{"Solution", "PostgreSQL", FALSE, FALSE, "Solution"}, /* mixed case */
+	{"Solution", "PostgreSQL", FALSE, TRUE, "\"Solution\""},
+
+	{"5olution", "PostgreSQL", FALSE, FALSE, "\"5olution\""}, /* test 1st digit */
+	{"5olution", "PostgreSQL", FALSE, TRUE, "\"5olution\""},
+	{"5olution", "PostgreSQL", TRUE, FALSE, "\"5olution\""}, /* this should not happen, but just in case */
+	{"5olution", "PostgreSQL", TRUE, TRUE, "\"5olution\""}, /* this should not happen, but just in case */
+
+	{"$solu_t#ion", "PostgreSQL", FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+	{"$solu_t#ion", "PostgreSQL", FALSE, TRUE, "\"$solu_t#ion\""},
+	{"$solu_t#ion", "PostgreSQL", TRUE, FALSE, "$solu_t#ion"},
+	{"$solu_t#ion", "PostgreSQL", TRUE, TRUE, "\"$solu_t#ion\""},
+	
+	{"solu tion", "PostgreSQL", FALSE, FALSE, "\"solu tion\""}, /* non allowed characters */
+	{"solu tion", "PostgreSQL", FALSE, TRUE, "\"solu tion\""},
+	{"solu tion", "PostgreSQL", TRUE, FALSE, "\"solu tion\""},
+	{"solu tion", "PostgreSQL", TRUE, TRUE, "\"solu tion\""},
+
+	{"select", "PostgreSQL", FALSE, FALSE, "\"select\""}, /* SQL reserved keyword */
+	{"select", "PostgreSQL", FALSE, TRUE, "\"select\""},
+	{"select", "PostgreSQL", TRUE, FALSE, "\"select\""},
+	{"select", "PostgreSQL", TRUE, TRUE, "\"select\""},
+};
+
+int
+main (int argc, char** argv)
+{
+	gda_init ();
+	gint i, nfailed = 0;
+	for (i = 0; i < G_N_ELEMENTS (tests); i++) {
+		ATest *test = &(tests [i]);
+		gchar *result;
+		GdaServerProvider *prov = NULL;
+		gboolean fail = FALSE;
+		if (test->provider) {
+			prov = gda_config_get_provider (test->provider, NULL);
+			if (!prov) {
+				g_print ("Can't find provider for %s, ignoring test\n", test->provider);
+				continue;
+			}
+		}
+		result = gda_sql_identifier_quote (test->sql_identifier, NULL, prov, test->meta_store_convention,
+						   test->force_quotes);
+		if (!result) {
+			if (test->expected_result) {
+				g_print ("Failed for %s: result is NULL when %s was expected\n",
+					 test->sql_identifier,
+					 test->expected_result);
+				fail = TRUE;
+			}
+		}
+		else {
+			if (!test->expected_result) {
+				g_print ("Failed for %s: result is %s when NULL was expected\n",
+					 test->sql_identifier,
+					 result);
+				fail = TRUE;
+			}
+			else if (strcmp (result, test->expected_result)) {
+				g_print ("Failed for %s: result is %s when %s was expected\n",
+					 test->sql_identifier,
+					 result, test->expected_result);
+				fail = TRUE;
+			}
+			g_free (result);
+		}
+
+		if (fail) {
+			g_print ("\tprovider: %s\n", test->provider);
+			g_print ("\tmeta store convention: %s\n", test->meta_store_convention ? "Yes" : "No");
+			g_print ("\tforce quotes: %s\n", test->force_quotes ? "Yes" : "No");
+			nfailed++;
+		}
+	}
+
+	g_print ("%d tests executed, ", i);
+	if (nfailed > 0)
+		g_print ("%d failed\n", nfailed);
+	else
+		g_print ("Ok\n");
+	return EXIT_SUCCESS;
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]