postgres에 SHOW CREATE TABLE과 동등한 MySQL이 있습니까?


66

SHOW CREATE TABLEpostgres에 해당하는 MySQL이 있습니까? 이게 가능해? 그렇지 않다면 차선책은 무엇입니까?

WCF를 통해 원격 서버에서 테이블을 작성하는 데 사용하기 때문에 명령문이 필요합니다.


그리고 MySQL은 모든 멋진 기능이없는 데이터베이스라고 생각했습니다.
Christopher K.

답변:


27

PostgreSQL 로그 파일에서 "pg_dump -t table -s"가 실제로하는 일을 추적 할 수 있습니다. 그런 다음 동일한 방법을 사용하여 고유 한 SQL 함수를 작성할 수 있습니다.


좋아, 나는 pg_dump를 추적했다. 그러나 create table 문을 작성하려면 C #으로 자체 함수를 작성해야했기 때문에 쉽지 않았습니다. 그러나 큰 도움이되었으므로 veeeeerrrryyyy에게 감사드립니다. : D
vlebar

모든 문제를 해결할 필요가 없습니다- 여기 에 따르면 명령 -E을 실행할 때 백그라운드에서 발생하는 일을 추적 하는 옵션을 사용할 수 있습니다 --HTH! psql-E: will describe the underlaying queries of the \ commands (cool for learning!)
Vérace

40

pg_dump :

pg_dump -st tablename dbname

또는 PostgreSQL GUI 도구 (pgAdmin, phpPgAdmin 등)를 사용하십시오.


문제를 더 자세히 설명하려고 노력할 것입니다. C # (NpgsqlCommand)에서 sql 명령을 실행하기 때문에 sql 문 (선택 또는 저장 프로 시저)이 필요합니다. 따라서이 경우 pg_dump가 해결책이 아니라고 생각합니다. :(
vlebar

1
왜 안돼? --schema-only스키마 / 테이블을 작성하기 위해 SQL 문을 표시하십시오. 어떻게 든이 출력을 C # 프로그램에 공급할 수 있습니다.
Sven

information_schema 뷰를보십시오 : postgresql.org/docs/9.0/interactive/information-schema.html
alvosu

1
@ SvenW : 알려진 테이블 세트가 있다면 그렇게 할 것입니다. 문제는 사용자가 선택한 경우 선택한 데이터베이스의 테이블을 동기화 한 다음 wcf 서비스 뒤에있는 원격 서버에서 선택한 테이블을 작성할 수 있다는 것입니다. 나는 mssql로 그렇게 할 수 있고 이제는 클라이언트 프로그램을 다른 SQL 서버 (mysql, oracle, postgresql 등)로 확장하고 싶다. 좋아, 사용자가 동기화하려는 테이블에 대해 pg_dump를 수행 할 수 있지만 plsql에서만 가능합니다. plsql에서 실행하고 싶습니다
vlebar

1
에 덤프하는 경우 아카이브 .tar에서 restore.sql파일을 가져옵니다 . 모든 create 문이 있습니다.
Joseph Lust

15

명령 행 ( psql)에서 다음을 실행 \d <table name>하여 모든 열, 해당 유형 및 색인을 나열 할 수 있습니다 .


5
이것은 도움이되지만 질문에 대답하지는 않습니다.
Ryan Tuck

4

@CubicalSoft의 답변의 첫 번째 부분을 기반으로 간단한 테이블에서 작동 해야하는 다음 함수를 드롭 할 수 있습니다 (기본 '공개'스키마를 가정하고 제약 조건, 인덱스 및 사용자 정의 데이터 형식 등을 생략합니다). @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>메타 명령을 사용 psql하면 데이터베이스에 테이블 구조를 표시 할 수 있습니다. meta 명령에 사용 된 쿼리를 보려면 명령을 사용할 수 있습니다 psql -E. 맨 페이지에 설명 된대로 -E스위치는 \d메타 명령 쿼리를 에코 합니다. 따라서 메타 명령을 psql -E사용하여 테이블 구조를 볼 수 있으며 스위치 \d <table>에 따라 -E테이블 구조를 설명하기 위해 생성 된 쿼리를 볼 수 있습니다.


0

에서 pgAdmin 네 , 바로 왼쪽, 예를 들면의 트리에서 테이블을 찾을 수 있습니다 :

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.