pgsql/schema_create_table_statement.sql
[Pman.Core] / pgsql / schema_create_table_statement.sql
index 065e4fc..3b0e260 100644 (file)
@@ -4,6 +4,7 @@ $BODY$
 DECLARE
     v_table_ddl   text;
     column_record record;
+    v_schema text;
 BEGIN
     FOR column_record IN 
         SELECT 
@@ -54,17 +55,46 @@ BEGIN
         ORDER BY a.attnum
     LOOP
         IF column_record.attnum = 1 THEN
-            v_table_ddl:='CREATE TABLE '||column_record.schema_name||'.'||column_record.table_name||' ();';
+            v_table_ddl:='CREATE TABLE '||column_record.schema_name||'.'||column_record.table_name||' ();'||chr(10)||chr(10);
         ELSE
-            v_table_ddl:= 'ALTER TABLE '||column_record.schema_name||'.'||column_record.table_name|| ' ADD COLUMN ' || v_table_ddl||';';
+            
         END IF;
         -- what does this do?
-        
+        v_schema := column_record.schema_name;
+         
         IF column_record.attnum <= column_record.max_attnum THEN
-            v_table_ddl:=v_table_ddl||chr(10)||
-                     '    '||column_record.column_name||' '||column_record.column_type||' '||column_record.column_default_value||' '||column_record.column_not_null;
+            v_table_ddl:= v_table_ddl||chr(10)||
+                     'ALTER TABLE  '||column_record.schema_name||'.'||column_record.table_name||
+                     ' ADD COLUMN ' ||column_record.column_name||' '||column_record.column_type||' '||column_record.column_default_value||' '||column_record.column_not_null || ';';
         END IF;
     END LOOP;
+    
+    FOR column_record IN 
+        SELECT
+                c.oid,
+                c.relname,
+                a.attname,
+                a.attnum,
+                CASE
+                    WHEN i.indisprimary THEN 'ALTER TABLE '||v_schema||'.'||p_table_name||' ADD CONSTRAINT ' || c.relname || ' PRIMARY KEY (' || a.attname || ');'
+                     
+                    WHEN i.indisunique THEN 'CREATE UNIQUE INDEX '|| c.relname || ' ON ' ||v_schema||'.'||p_table_name||' USING btree (' || a.attname || ');'
+                    ELSE
+                    'CREATE INDEX '|| c.relname || ' ON ' ||v_schema||'.'||p_table_name||' USING btree (' || a.attname || ' );'
+                END as iline
+            FROM pg_index AS i, pg_class AS c, pg_attribute AS a
+            WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = (v_schema|| '.' || p_table_name)::regclass
+
+    LOOP
+         
+            v_table_ddl:= v_table_ddl||chr(10)||
+                      column_record.iline;
+         
+    END LOOP;
+
+
+
+
 
     --v_table_ddl:=v_table_ddl||');';
     RETURN v_table_ddl;