পোস্টগ্রিসে শো ক্রেট টেবিলের কোনও মাইএসকিউএল সমপরিমাণ আছে?


66

SHOW CREATE TABLEপোস্টগ্রিসে কি কোনও মাইএসকিউএল সমতুল্য রয়েছে ? এটা কি সম্ভব? না হলে পরবর্তী সেরা সমাধান কী?

আমার বিবৃতিটি প্রয়োজন কারণ আমি এটি একটি রিমোট সার্ভারে টেবিল তৈরি করতে (ডাব্লুসিএফের ওপরে) ব্যবহার করি।


এবং আমি ভেবেছিলাম যে মাইএসকিউএল হ'ল ডাটাবেসটি হ'ল শীতল বৈশিষ্ট্যগুলি ...
ক্রিস্টোফার কে।

উত্তর:


27

আপনি পোস্টগ্র্রেএসকিউএল লগ ফাইলটি "pg_dump -t টেবিল-গুলি" কী করে তা সন্ধান করার চেষ্টা করতে পারেন। তারপরে আপনি একই পদ্ধতিটি আপনার নিজের এসকিএল ফাংশন লিখতে পারেন।


ঠিক আছে, আমি pg_dump ট্রেস। তবে এটি ততটা সহজ ছিল না, বেকোউজ তৈরির টেবিলের বিবৃতি লেখার জন্য আমাকে নিজের # ফাংশন লিখতে হয়েছিল #। তবে এটি একটি বড় সহায়তা ছিল, তাই আপনাকে ভীরির্র্য্যয় অনেক ধন্যবাদ। : ডি
ভ্লেবার

এই সমস্ত সমস্যায় যাওয়ার দরকার নেই - এখানে অনুসারে আপনি -Eকোনও psqlকমান্ড চালানোর সময় পটভূমিতে কী ঘটছে তা সন্ধান করার বিকল্পটি ব্যবহার করতে পারেন -E: will describe the underlaying queries of the \ commands (cool for learning!)- এইচটিএইচ!
ভেরাস

40

pg_dump:

pg_dump -st tablename dbname

অথবা PostgreSQL GUI সরঞ্জামগুলি ব্যবহার করুন (pgAdmin, phpPgAdmin, ইত্যাদি)


আমি আরও বিস্তারিতভাবে সমস্যাটি ব্যাখ্যা করার চেষ্টা করব। আমার স্কেল স্টেটমেন্ট দরকার (নির্বাচন করুন বা সঞ্চিত পদ্ধতি) বিকাউস আমি সি # (এনপিএএসএসকিএলকম্যান্ড) এ এসকিএল কমান্ড কার্যকর করি। সুতরাং আমি মনে করি pg_dump এই ক্ষেত্রে সমাধান নয়। :(
vlebar

1
কেন না? --schema-onlyএই সঠিক উদ্দেশ্য আছে: স্কিমা / সারণী তৈরি করতে এসকিউএল বিবৃতি প্রদর্শন করুন। আপনি এই আউটপুটটি কোনওভাবে আপনার সি # প্রোগ্রামে ফিড করতে পারেন।
সেভেন


1
@ সোভেনডাব্লু: আমি যদি টেবিলগুলির একটি পরিচিত সেট থাকি তবে আমি তা করব। সমস্যাটি হ'ল ব্যবহারকারী যদি চয়ন করেন তবে নির্বাচিত ডাটাবেসে কোনও টেবিল সিঙ্ক করতে পারেন এবং তারপরে একটি wcf পরিষেবার পিছনে একটি রিমোট সার্ভারে নির্বাচিত টেবিলটি তৈরি করতে পারেন। আমি এমএসকিউএল দিয়ে এটি করতে পারি এবং এখন আমি ক্লায়েন্ট প্রোগ্রামটি অন্য এসকিউএল সার্ভারগুলিতে প্রসারিত করতে চাই (মাইএসকিএল, ওরাকল, পোস্টগ্র্যাস্কিল, ...) ঠিক আছে, আমি ব্যবহারকারী যে সিঙ্ক করতে চাইবে সেই টেবিলের জন্য pg_dump করতে পারি, তবে এটি যদি হয় যেকোন সম্ভব পলিক্সএইচএল-তে করতে, আমি এটি পিএলএসকিএল
তে

1
থাকলে ডাম্পিং .tar, দখল restore.sqlআর্কাইভ থেকে ফাইল। এটিতে সমস্ত তৈরি বিবৃতি রয়েছে।
জোসেফ


4

@ কিউবিকলসফ্টের উত্তরের প্রথম অংশে বিল্ডিং আপনি নিম্নলিখিত ফাংশনটিতে ফেলে দিতে পারেন যা সাধারণ টেবিলগুলির জন্য কাজ করা উচিত (ডিফল্ট 'পাবলিক' স্কিমা 'ধরে রাখে এবং সীমাবদ্ধতা, সূচি এবং ব্যবহারকারী সংজ্ঞায়িত ডেটা প্রকার ইত্যাদি বাদ দেয়)। @ আরজেএস উত্তর হ'ল এই মুহুর্তে এটি সঠিকভাবে করার একমাত্র উপায়; এটি পিএসকিএল মধ্যে তৈরি করা উচিত যে কিছু!

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;

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
এক্সবুক

এই জন্য আপনাকে ধন্যবাদ!
স্পষ্ট

3

আমি বুঝতে পেরেছি যে আমি এই পার্টিতে কিছুটা দেরি করেছি, তবে এটি আমার গুগল অনুসন্ধানে প্রথম ফলাফল ছিল তাই আমি বুঝতে পেরেছিলাম যে আমি কী নিয়ে এসেছি তার উত্তর দিয়েছি।

কলামগুলি পাওয়ার জন্য আপনি এই ক্যোয়ারির সাথে সমাধানের দিকে বেশ দূরে যেতে পারেন:

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সাহায্যে ডাটাবেসে টেবিলের কাঠামো প্রদর্শন করা সম্ভব। আপনি যদি মেটা-কমান্ডে ব্যবহৃত কোয়েরিটি দেখতে চান তবে আপনি কমান্ডটি ব্যবহার করতে পারেন psql -E। ম্যানপেজে বর্ণিত হিসাবে, -Eস্যুইচটি \dমেটা-কমান্ডের কোয়েরিগুলিকে প্রতিধ্বনিত করে । সুতরাং, আপনি প্রবর্তন করতে পারেন psql -E, আপনি \d <table>মেটা-কমান্ডের সাহায্যে টেবিলের কাঠামোটি দেখতে পারবেন এবং -Eস্যুইচ অনুসারে আপনি সারণির কাঠামো বর্ণনা করার জন্য উত্পন্ন ক্যোয়ারীটি দেখতে পারেন


0

ইন pgAdmin 4 , শুধু বাম, যেমন গাছটিতে টেবিল খুঁজে পেয়েছেন:

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

সারণিটি নির্বাচন করা হলে ডানদিকে এসকিউএল ট্যাবটি খুলুন । এটি CREATE TABLEনির্বাচিত টেবিলের জন্য প্রদর্শন করে ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.