diff --git a/backup/predata_functions.go b/backup/predata_functions.go index 61cd31d..b1bcdd9 100644 --- a/backup/predata_functions.go +++ b/backup/predata_functions.go @@ -112,7 +112,7 @@ func PrintFunctionModifiers(metadataFile *utils.FileWithByteCount, funcDef Funct } // Stored procedures do not permit parallelism declarations - if funcDef.Kind != "p" { + if funcDef.Kind != "p" { switch funcDef.Parallel { case "u": metadataFile.MustPrintf(" PARALLEL UNSAFE") @@ -278,7 +278,10 @@ func PrintCreateCastStatement(metadataFile *utils.FileWithByteCount, toc *toc.TO func PrintCreateExtensionStatements(metadataFile *utils.FileWithByteCount, toc *toc.TOC, extensionDefs []Extension, extensionMetadata MetadataMap) { for _, extensionDef := range extensionDefs { start := metadataFile.ByteCount - metadataFile.MustPrintf("\n\nSET search_path=%s,pg_catalog;\nCREATE EXTENSION IF NOT EXISTS %s WITH SCHEMA %s;\nSET search_path=pg_catalog;", extensionDef.Schema, extensionDef.Name, extensionDef.Schema) + // changes to gp_toolkit in gpdb7 require explicilty creating the schema before the extension + metadataFile.MustPrintf( + "\n\nCREATE SCHEMA IF NOT EXISTS %[1]s;\nSET search_path=%[1]s,pg_catalog;\nCREATE EXTENSION IF NOT EXISTS %[2]s WITH SCHEMA %[1]s;\nSET search_path=pg_catalog;\n", + extensionDef.Schema, extensionDef.Name) section, entry := extensionDef.GetMetadataEntry() toc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount) diff --git a/backup/predata_functions_test.go b/backup/predata_functions_test.go index 6063779..768adc4 100644 --- a/backup/predata_functions_test.go +++ b/backup/predata_functions_test.go @@ -695,7 +695,8 @@ AS ASSIGNMENT;`) It("prints a create extension statement", func() { extensionDef := backup.Extension{Oid: 1, Name: "extension1", Schema: "schema1"} backup.PrintCreateExtensionStatements(backupfile, tocfile, []backup.Extension{extensionDef}, emptyMetadataMap) - testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `SET search_path=schema1,pg_catalog; + testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE SCHEMA IF NOT EXISTS schema1; +SET search_path=schema1,pg_catalog; CREATE EXTENSION IF NOT EXISTS extension1 WITH SCHEMA schema1; SET search_path=pg_catalog;`) }) @@ -703,7 +704,8 @@ SET search_path=pg_catalog;`) extensionDef := backup.Extension{Oid: 1, Name: "extension1", Schema: "schema1"} extensionMetadataMap := testutils.DefaultMetadataMap("EXTENSION", false, false, true, false) backup.PrintCreateExtensionStatements(backupfile, tocfile, []backup.Extension{extensionDef}, extensionMetadataMap) - testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `SET search_path=schema1,pg_catalog; + testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE SCHEMA IF NOT EXISTS schema1; +SET search_path=schema1,pg_catalog; CREATE EXTENSION IF NOT EXISTS extension1 WITH SCHEMA schema1; SET search_path=pg_catalog;`, "COMMENT ON EXTENSION extension1 IS 'This is an extension comment.';") })