DECLARE
v_table_ddl text;
column_record record;
+ v_schema text;
BEGIN
FOR column_record IN
SELECT
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;