CREATE TABLE ... LIKE ...
. में स्वचालित रूप से विदेशी कुंजी बनाने का कोई विकल्प नहीं है .
दस्तावेज़ीकरण: के लिए
व्यवहार में यह GUI टूल के साथ आसान है। उदाहरण के लिए, PgAdmin III में:
source_table
. का डिक्लेरेशन (DDL) कॉपी करें टूल को क्वेरी करने के लिए (ctrl-e),- घोषणा संपादित करें,
- एसक्यूएल निष्पादित करें।
SQL स्क्रिप्ट में आप निम्न फ़ंक्शन का उपयोग कर सकते हैं। महत्वपूर्ण धारणा:स्रोत तालिका विदेशी कुंजियों के सही नाम होते हैं यानी उनके नामों में स्रोत तालिका का नाम होता है (एक विशिष्ट स्थिति क्या है)।
create or replace function create_table_like(source_table text, new_table text)
returns void language plpgsql
as $$
declare
rec record;
begin
execute format(
'create table %s (like %s including all)',
new_table, source_table);
for rec in
select oid, conname
from pg_constraint
where contype = 'f'
and conrelid = source_table::regclass
loop
execute format(
'alter table %s add constraint %s %s',
new_table,
replace(rec.conname, source_table, new_table),
pg_get_constraintdef(rec.oid));
end loop;
end $$;
उपयोग का उदाहरण:
create table base_table (base_id int primary key);
create table source_table (id int primary key, base_id int references base_table);
select create_table_like('source_table', 'new_table');
\d new_table
Table "public.new_table"
Column | Type | Modifiers
---------+---------+-----------
id | integer | not null
base_id | integer |
Indexes:
"new_table_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"new_table_base_id_fkey" FOREIGN KEY (base_id) REFERENCES base_table(base_id)