diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml b/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
index b32f611526ac6dc6c1d7064907c1fae2fb75042a..d9db9b1c841e0dd67219c74fb1062c534865aeeb 100644
--- a/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
+++ b/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
@@ -348,6 +348,7 @@
+
actions, NestedObjectCommand command, Map options)
+ {
+ PostgreSchema schema = command.getObject();
+ String comment = schema.getDescription();
+
+ if (comment != null) {
+ actions.add(new SQLDatabasePersistAction(
+ "Comment schema",
+ "COMMENT ON SCHEMA " + DBUtils.getQuotedIdentifier(schema) +
+ " IS " + SQLUtils.quoteString(schema, comment)));
+ }
+ }
+
}
diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java
index 60f6434f033b032f9bd165308d5159cf6f35080c..beed7b61c852d5a049d283d976ed4bff3b51636d 100644
--- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java
+++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java
@@ -35,12 +35,14 @@ import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCStructLookupCache;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
+import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityConstraintType;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureContainer;
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
+import org.jkiss.utils.CommonUtils;
import java.lang.reflect.Array;
import java.sql.ResultSet;
@@ -54,7 +56,7 @@ import java.util.stream.Collectors;
/**
* PostgreSchema
*/
-public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObject, DBPRefreshableObject, DBPSystemObject, DBSProcedureContainer, PostgreObject {
+public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObject, DBPRefreshableObject, DBPSystemObject, DBSProcedureContainer, PostgreObject, PostgreScriptObject {
private static final Log log = Log.getLog(PostgreSchema.class);
@@ -127,13 +129,17 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj
return PostgreUtils.getObjectById(monitor, database.roleCache, database, ownerId);
}
- @Property(viewable = true, order = 100)
+ @Property(viewable = true, editable = true, updatable = true, order = 100)
@Nullable
@Override
public String getDescription() {
return description;
}
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
@Override
public PostgreDatabase getParentObject()
{
@@ -338,6 +344,28 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj
return PostgreConstants.CATALOG_SCHEMA_NAME.equals(name);
}
+ @Override
+ public String getObjectDefinitionText(DBRProgressMonitor monitor, Map options) throws DBException {
+ StringBuilder sql = new StringBuilder();
+ sql.append("-- DROP SCHEMA ").append(DBUtils.getQuotedIdentifier(this)).append(";\n\n");
+ sql.append("CREATE SCHEMA ").append(DBUtils.getQuotedIdentifier(this));
+ PostgreRole owner = getOwner(monitor);
+ if (owner != null) {
+ sql.append(" AUTHORIZATION ").append(DBUtils.getQuotedIdentifier(owner));
+ }
+ sql.append(";\n\n");
+ if (!CommonUtils.isEmpty(getDescription())) {
+ sql.append("COMMENT ON SCHEMA ").append(DBUtils.getQuotedIdentifier(this))
+ .append(" IS ").append(SQLUtils.quoteString(this, getDescription()));
+ }
+ return sql.toString();
+ }
+
+ @Override
+ public void setObjectDefinitionText(String sourceText) throws DBException {
+ throw new DBException("Schema DDL is read-only");
+ }
+
class CollationCache extends JDBCObjectCache {
@Override
diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java
index 3a781b80ede8cd06908bee1bff27aa28eb5b2712..7b5e70271beee21c22020a44131e573d75dc8ef0 100644
--- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java
+++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java
@@ -17,9 +17,6 @@
package org.jkiss.dbeaver.ext.postgresql.ui.editors;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IContributionManager;
@@ -30,13 +27,9 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IEditorInput;
import org.jkiss.dbeaver.ext.postgresql.PostgreActivator;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
-import org.jkiss.dbeaver.ext.postgresql.model.PostgrePermissionsOwner;
-import org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure;
-import org.jkiss.dbeaver.ext.postgresql.model.PostgreScriptObject;
-import org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase;
+import org.jkiss.dbeaver.ext.postgresql.model.*;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.UIUtils;
@@ -46,6 +39,8 @@ import org.jkiss.dbeaver.utils.GeneralUtils;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
+import java.util.Map;
+
/**
* PostgreSourceViewEditor
*/
@@ -98,7 +93,11 @@ public class PostgreSourceViewEditor extends SQLSourceViewer