มีเทียบเท่า MySQL SHOW CREATE TABLE
ใน postgres? เป็นไปได้ไหม ถ้าไม่ใช่ทางออกที่ดีที่สุดถัดไปคืออะไร
ฉันต้องการคำสั่งเพราะฉันใช้มันเพื่อสร้างตารางบนเซิร์ฟเวอร์ระยะไกล (มากกว่า WCF)
มีเทียบเท่า MySQL SHOW CREATE TABLE
ใน postgres? เป็นไปได้ไหม ถ้าไม่ใช่ทางออกที่ดีที่สุดถัดไปคืออะไร
ฉันต้องการคำสั่งเพราะฉันใช้มันเพื่อสร้างตารางบนเซิร์ฟเวอร์ระยะไกล (มากกว่า WCF)
คำตอบ:
คุณสามารถลองติดตามในไฟล์บันทึก PostgreSQL ว่า "pg_dump -t table -s" ทำอะไรได้จริงๆจากนั้นคุณสามารถใช้วิธีการเดียวกันเพื่อเขียนฟังก์ชัน sql ของคุณเอง
pg_dump:
pg_dump -st tablename dbname
หรือใช้เครื่องมือ GUI PostgreSQL (pgAdmin, phpPgAdmin เป็นต้น)
--schema-only
มีวัตถุประสงค์ตรงนี้: แสดงคำสั่ง SQL เพื่อสร้าง schema / ตาราง คุณสามารถป้อนผลลัพธ์นี้ในโปรแกรม C # ของคุณได้
.tar
คว้าrestore.sql
ไฟล์จากที่เก็บ มันมีงบสร้างทั้งหมด
ในบรรทัดคำสั่ง ( psql
) คุณสามารถเรียกใช้: \d <table name>
เพื่อแสดงรายการคอลัมน์ทั้งหมดชนิดและดัชนี
การสร้างในส่วนแรกของคำตอบของ @ CubicalSoft คุณสามารถวางฟังก์ชั่นต่อไปนี้ซึ่งควรใช้กับตารางอย่างง่าย (สมมติว่า 'schema' สาธารณะ 'เริ่มต้นและละเว้นข้อ จำกัด ดัชนีและประเภทข้อมูลที่ผู้ใช้กำหนดเป็นต้น) @RJS คำตอบเป็นวิธีเดียวที่จะทำอย่างถูกต้องในขณะนี้; นี่คือสิ่งที่ควรสร้างไว้ใน psql!
CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' )
RETURNS text AS
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' ||
string_agg(column_list.column_expr, ', ' || $2 || '') ||
'' || $2 || ');'
FROM (
SELECT ' ' || column_name || ' ' || data_type ||
coalesce('(' || character_maximum_length || ')', '') ||
case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = $1
ORDER BY ordinal_position) column_list;
$BODY$
LANGUAGE SQL STABLE;
ฉันรู้ว่าฉันมาช้าไปงานปาร์ตี้นี้ แต่นี่เป็นผลลัพธ์แรกของการค้นหาโดย Google ดังนั้นฉันจึงคิดว่าฉันจะตอบสิ่งที่ฉันคิดขึ้นมา
คุณสามารถหาวิธีแก้ปัญหาด้วยแบบสอบถามนี้เพื่อรับคอลัมน์:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
แล้วแบบสอบถามนี้สำหรับดัชนีทั่วไปส่วนใหญ่:
SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
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 = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum
ดังนั้นจึงเป็นเรื่องของการสร้างสตริงข้อความค้นหาในรูปแบบที่ถูกต้อง
ตามคำตอบในhttps://serverfault.com/a/875414/333439โดยมี\d <table>
คำสั่ง meta-in psql
เป็นไปได้ที่จะแสดงโครงสร้างตารางในฐานข้อมูล psql -E
หากคุณต้องการดูแบบสอบถามที่ใช้ในการเมตาคำสั่งคุณสามารถใช้คำสั่ง ตามที่อธิบายไว้ใน manpage -E
สวิตช์จะสะท้อน\d
เคียวรีคำสั่ง meta ดังนั้นคุณสามารถเรียกใช้psql -E
คุณสามารถดูโครงสร้างของตารางด้วย\d <table>
คำสั่ง meta และตาม-E
สวิตช์คุณสามารถดูแบบสอบถามที่สร้างขึ้นเพื่ออธิบายโครงสร้างของตาราง
ในpgAdmin 4เพียงค้นหาตารางในต้นไม้ทางด้านซ้ายเช่น:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
เมื่อตารางถูกเลือกให้เปิดแท็บ SQLทางด้านขวา จะแสดงCREATE TABLE
สำหรับตารางที่เลือก
Postgres extension ddlx ( https://github.com/lacanoid/pgddl ) ทำสิ่งนี้และอื่น ๆ