มี MySQL เทียบเท่ากับ SHOW CREATE TABLE ใน postgres หรือไม่


66

มีเทียบเท่า MySQL SHOW CREATE TABLEใน postgres? เป็นไปได้ไหม ถ้าไม่ใช่ทางออกที่ดีที่สุดถัดไปคืออะไร

ฉันต้องการคำสั่งเพราะฉันใช้มันเพื่อสร้างตารางบนเซิร์ฟเวอร์ระยะไกล (มากกว่า WCF)


และฉันคิดว่า MySQL เป็นฐานข้อมูลที่ขาดหายไปคุณสมบัติเย็นทั้งหมด ...
คริสเค

คำตอบ:


27

คุณสามารถลองติดตามในไฟล์บันทึก PostgreSQL ว่า "pg_dump -t table -s" ทำอะไรได้จริงๆจากนั้นคุณสามารถใช้วิธีการเดียวกันเพื่อเขียนฟังก์ชัน sql ของคุณเอง


ตกลงฉันติดตาม pg_dump แต่มันไม่ง่ายเลยเพราะฉันต้องเขียนฟังก์ชันของตัวเองใน C # เพื่อเขียนคำสั่งสร้างตาราง แต่มันเป็นความช่วยเหลือที่ยิ่งใหญ่ขอบคุณมาก veeeeerrrryyyy มาก : D
vlebar

ไม่จำเป็นต้องไปที่ปัญหาทั้งหมด - ตามที่นี่คุณสามารถใช้-Eตัวเลือกเพื่อติดตามสิ่งที่เกิดขึ้นในพื้นหลังเมื่อคุณเรียกใช้psqlคำสั่ง - -E: will describe the underlaying queries of the \ commands (cool for learning!)- HTH!
Vérace

40

pg_dump:

pg_dump -st tablename dbname

หรือใช้เครื่องมือ GUI PostgreSQL (pgAdmin, phpPgAdmin เป็นต้น)


ฉันจะพยายามอธิบายปัญหาในรายละเอียดเพิ่มเติม ฉันต้องการคำสั่ง sql (เลือกหรือขั้นตอนการจัดเก็บ) เพราะฉันรันคำสั่ง sql ใน C # (NpgsqlCommand) ดังนั้นฉันคิดว่า pg_dump ไม่ใช่วิธีแก้ปัญหาในกรณีนี้ :(
vlebar

1
ทำไมจะไม่ล่ะ? --schema-onlyมีวัตถุประสงค์ตรงนี้: แสดงคำสั่ง SQL เพื่อสร้าง schema / ตาราง คุณสามารถป้อนผลลัพธ์นี้ในโปรแกรม C # ของคุณได้
สเวน

ดูที่มุมมอง
data_schema

1
@SevenW: ฉันจะทำอย่างนั้นถ้าฉันมีตารางชุดที่รู้จัก ปัญหาคือผู้ใช้สามารถซิงค์ตารางใด ๆ ในฐานข้อมูลที่เลือกและจากนั้นสร้างตารางที่เลือกบนเซิร์ฟเวอร์ระยะไกลที่อยู่เบื้องหลังบริการ wcf ฉันสามารถทำกับ mssql และตอนนี้ฉันต้องการขยายโปรแกรมไคลเอนต์ไปยังเซิร์ฟเวอร์ sql อื่น ๆ (mysql, oracle, postgresql, ... ) ตกลงฉันสามารถทำ pg_dump สำหรับตารางที่ผู้ใช้ต้องการซิงค์ แต่ถ้ามันเป็น ที่เป็นไปได้ทั้งหมดที่จะทำเพียงแค่ใน PLSQL ฉันต้องการจะทำมันใน PLSQL
vlebar

1
หากทิ้งไปที่.tarคว้าrestore.sqlไฟล์จากที่เก็บ มันมีงบสร้างทั้งหมด
Joseph Lust

15

ในบรรทัดคำสั่ง ( psql) คุณสามารถเรียกใช้: \d <table name>เพื่อแสดงรายการคอลัมน์ทั้งหมดชนิดและดัชนี


5
สิ่งนี้มีประโยชน์ แต่ไม่ตอบคำถาม
Ryan Tuck

4

การสร้างในส่วนแรกของคำตอบของ @ 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;

นี่ควรเป็นคำตอบที่ยอมรับ
exebook

ขอบคุณสำหรับสิ่งนี้!
ตรงไปตรงมา

3

ฉันรู้ว่าฉันมาช้าไปงานปาร์ตี้นี้ แต่นี่เป็นผลลัพธ์แรกของการค้นหาโดย 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

ดังนั้นจึงเป็นเรื่องของการสร้างสตริงข้อความค้นหาในรูปแบบที่ถูกต้อง


2

ตามคำตอบในhttps://serverfault.com/a/875414/333439โดยมี\d <table>คำสั่ง meta-in psqlเป็นไปได้ที่จะแสดงโครงสร้างตารางในฐานข้อมูล psql -Eหากคุณต้องการดูแบบสอบถามที่ใช้ในการเมตาคำสั่งคุณสามารถใช้คำสั่ง ตามที่อธิบายไว้ใน manpage -Eสวิตช์จะสะท้อน\dเคียวรีคำสั่ง meta ดังนั้นคุณสามารถเรียกใช้psql -Eคุณสามารถดูโครงสร้างของตารางด้วย\d <table>คำสั่ง meta และตาม-Eสวิตช์คุณสามารถดูแบบสอบถามที่สร้างขึ้นเพื่ออธิบายโครงสร้างของตาราง


0

ในpgAdmin 4เพียงค้นหาตารางในต้นไม้ทางด้านซ้ายเช่น:

Servers
+ PostgreSQL 11
  + Databases
    + MYDATABASENAME
      + Schemas
        + public
          + Tables
            + MYTABLENAME  <-- click this tree element

เมื่อตารางถูกเลือกให้เปิดแท็บ SQLทางด้านขวา จะแสดงCREATE TABLEสำหรับตารางที่เลือก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.