' ADD COLUMN ' ||column_record.column_name||' '||column_record.column_type||' '||column_record.column_default_value||' '||column_record.column_not_null || ';';
END IF;
END LOOP;
-
+ v_table_ddl:= v_table_ddl||chr(10);
FOR column_record IN
SELECT
c.oid,
a.attname,
a.attnum,
CASE
- WHEN i.indisprimary THEN 'ALTER TABLE '||v_schema||'.'||p_table_name||' ADD CONSTRAINT ' || c.relname || ' PRIMARY KEY (' || c.attname || ');'
+ 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 (' || c.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 (' || c.attname || ' );'
+ '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
v_table_ddl:= v_table_ddl||chr(10)||
column_record.iline;
- END IF;
+
END LOOP;
+ v_table_ddl:= v_table_ddl||chr(10);
+ -- constraints...
+ FOR column_record IN
+
+ SELECT
+ tc.constraint_name, tc.table_name, kcu.column_name,
+ ccu.table_name AS foreign_table_name,
+ ccu.column_name AS foreign_column_name
+ FROM
+ information_schema.table_constraints AS tc
+ JOIN information_schema.key_column_usage AS kcu
+ ON tc.constraint_name = kcu.constraint_name
+ JOIN information_schema.constraint_column_usage AS ccu
+ ON ccu.constraint_name = tc.constraint_name
+ WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name=p_table_name
+
+ LOOP
+
+ v_table_ddl:= v_table_ddl||chr(10)||
+ 'ALTER TABLE ' ||v_schema||'.'||p_table_name||' ADD CONSTRAINT ' || column_record.constraint_name ||
+ ' FOREIGN KEY (' || column_record.column_name || ') REFERENCES ' || column_record.foreign_table_name || '(' || column_record.foreign_column_name || ') MATCH SIMPLE;';
+
+ END LOOP;
+
+
+
+
+ v_table_ddl:= v_table_ddl||chr(10);
--v_table_ddl:=v_table_ddl||');';