Có một MySQL tương đương với SHOW CREATE TABLE
postgres? Điều này có thể không? Nếu không giải pháp tốt nhất tiếp theo là gì?
Tôi cần câu lệnh vì tôi sử dụng nó để tạo bảng trên một máy chủ từ xa (trên WCF).
Có một MySQL tương đương với SHOW CREATE TABLE
postgres? Điều này có thể không? Nếu không giải pháp tốt nhất tiếp theo là gì?
Tôi cần câu lệnh vì tôi sử dụng nó để tạo bảng trên một máy chủ từ xa (trên WCF).
Câu trả lời:
Bạn có thể thử theo dõi trong tệp nhật ký PostgreQuery những gì "pg_dump -t bảng -s" thực sự làm. Sau đó, bạn có thể sử dụng cùng một phương pháp để viết hàm sql của riêng bạn.
pg_dump:
pg_dump -st tablename dbname
hoặc sử dụng Công cụ GUI PostgreSQL (pgAdmin, phpPgAdmin, v.v.)
--schema-only
có mục đích chính xác này: Hiển thị các câu lệnh SQL để tạo lược đồ / bảng. Bạn có thể cung cấp đầu ra này vào chương trình C # của mình bằng cách nào đó.
.tar
, lấy restore.sql
tệp từ kho lưu trữ. Nó có tất cả các báo cáo tạo.
Trong dòng lệnh ( psql
) bạn có thể chạy: \d <table name>
để liệt kê tất cả các cột, loại và chỉ mục của chúng.
Dựa trên phần đầu tiên của câu trả lời của @ CubicalSoft, bạn có thể bỏ qua hàm sau sẽ hoạt động cho các bảng đơn giản (giả sử lược đồ 'công khai' mặc định và bỏ qua các ràng buộc, chỉ mục và loại dữ liệu do người dùng xác định, v.v.). Câu trả lời @RJS là cách duy nhất để làm điều đó đúng vào lúc này; đây là một cái gì đó nên được xây dựng trong 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;
Tôi nhận ra rằng tôi đến hơi muộn với bữa tiệc này, nhưng đây là kết quả đầu tiên cho Tìm kiếm Google của tôi vì vậy tôi đoán rằng tôi đã trả lời với những gì tôi nghĩ ra.
Bạn có thể đi khá xa tới một giải pháp với truy vấn này để lấy các cột:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
Và sau đó truy vấn này cho hầu hết các chỉ mục phổ biến:
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
Sau đó, vấn đề là xây dựng (các) chuỗi truy vấn theo đúng định dạng.
Như đã trả lời trong https://serverfault.com/a/875414/333439 , với lệnh \d <table>
meta trong psql
có thể hiển thị cấu trúc bảng trong cơ sở dữ liệu. Nếu bạn muốn xem truy vấn được sử dụng trong lệnh meta, bạn có thể sử dụng lệnh psql -E
. Như được mô tả trong trang, công -E
tắc lặp lại \d
các truy vấn lệnh meta. Vì vậy, bạn có thể khởi chạy psql -E
, bạn có thể xem cấu trúc bảng bằng \d <table>
lệnh meta và, theo -E
chuyển đổi, bạn có thể xem truy vấn được tạo để mô tả cấu trúc bảng
Trong pgAdmin 4 , chỉ cần tìm bảng trong cây bên trái, ví dụ:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Khi bảng được chọn, hãy mở tab SQL ở bên phải. Nó hiển thị CREATE TABLE
bảng đã chọn.
Postgres tiện ích mở rộng ddlx ( https://github.com/lacanoid/pgddl ) thực hiện chính xác điều này và hơn thế nữa.