পোস্টগ্রিজগুলিতে স্বতঃবৃদ্ধি কাউন্টার পুনরায় সেট করুন


232

আমি কোনও টেবিলের অটো ইনক্রিমেন্ট ক্ষেত্রকে কিছু মূল্যে বাধ্য করতে চাই, আমি এটি দিয়ে চেষ্টা করেছি:

ALTER TABLE product AUTO_INCREMENT = 1453

এবং

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

আমি পোস্টগ্রাগে নতুন :(

আমার productসাথে ফিল্ড Idএবং nameফিল্ড রয়েছে field


5
নতুন হলে পিজিএডমিন ব্যবহার করবেন না এবং এটি উত্পন্ন হবার নির্দেশগুলি পরীক্ষা করবে না কেন?
অবাস্তব

1
সাধারণত টেবিল 'পণ্য মত "এবং না একটি মত" পণ্য নামকরণ করা হয় products_id_seq "নিশ্চিত হন যে আপনি একটি সঠিক ক্রম খুঁজছেন" এই ক্ষেত্রে আপনার ক্রম মত নামে করা হবে না।
আলেকজান্ডার gorg

উত্তর:


309

যদি আপনি productকোনও idকলাম দিয়ে টেবিলটি তৈরি করেন , তবে ক্রমটি কেবল বলা হয় না product, বরং product_id_seq(যা হয় ${table}_${column}_seq)।

এটি ALTER SEQUENCEআপনার প্রয়োজন আদেশটি:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

আপনি \dsপিএসএইচএল-তে কমান্ডটি ব্যবহার করে আপনার ডাটাবেসের ক্রমগুলি দেখতে পারেন । আপনি যদি করেন \d productএবং আপনার কলামটির জন্য ডিফল্ট সীমাবদ্ধতার দিকে তাকান, nextval(...)কলটি ক্রমের নামটিও নির্দিষ্ট করবে।


66
সঠিক বাক্য গঠন কী তা এই বার্তাটি থেকে পরিষ্কার নয়। এটি হ'ল: 1453 এর সাথে SEQUENCE product_id_seq পুনরায় শুরু করুন;
লিরন ইয়াহদাভ

7
আমি উপরেরটিকে দুর্বলভাবে পার্স করার কারণে, ঠিক একই জিনিসটি পুনরায় রাখার আমার উপায়। বাক্য ALTER SEQUENCE yourTableName_yourColumnName_seq RESTART WITH #গঠনটি যেখানে "সিক" হ'ল আক্ষরিক পাঠ্য, এবং আপনি একটি সংখ্যার জন্য # রেখেছেন। আন্ডারস্কোরগুলিকে অবহেলা করবেন না। :-)
1515

2
দয়া করে মনে রাখবেন যে সর্বজনীন স্কিমা ব্যবহার না করা হলে এটি my_schema সহ উপসর্গ করা প্রয়োজন। ALTER SEQUENCE my_schema.product_id_seq RESTART WITH 1453
ড্যানিয়েল এল। ভ্যানডেনবোশ

কেউ কি জানেন যে কেন ALTER SEQUENCE product_id_seq পুনরায় চালু করুন (পণ্য থেকে ম্যাক্স (আইডি) নির্বাচন করুন); কাজ করে না? আমি খুঁজে পেলাম একমাত্র উপায় দুটি পৃথক ক্যোয়ারী ব্যবহার করা।
ক্রিস হুয়াং-লিভার

8
দ্রষ্টব্য যে আপনি যে মানটি দিয়ে পুনরায় আরম্ভ করবেন তা হ'ল পরবর্তী মানটি আপনি ব্যবহার করতে চান। সুতরাং আপনার যদি ইতিমধ্যে আইডি সহ কোনও রেকর্ড থাকে তবে 1453আপনার উচিত RESTART WITH 1454
হিউজেস

144

পণ্যের সারণির জন্য আপনার ক্রমটি ধরে রেখে পণ্য_আইড_সেক: আপনি যে আদেশটি সন্ধান করছেন তা এখানে:

SEQUENCE product_id_seq 1453 দিয়ে পুনরায় শুরু করুন;


130

নিম্নলিখিত কমান্ডটি আপনার জন্য এটি স্বয়ংক্রিয়ভাবে করে: এটি সারণীর সমস্ত ডেটাও মুছে ফেলবে। তাই সতর্কতা অবলম্বন করা.

TRUNCATE TABLE someTable RESTART IDENTITY;

21
সাবধান - এটি আপনার সমস্ত ডেটাও মুছে ফেলবে
কিবিবু

28
@ লুলুই, কেবল এটি পতাকাঙ্কিত করুন; যদি এসকিউএল এর সাথে অপরিচিত কেউ যদি এখানে অনুসন্ধান করে থাকে কারণ তারা স্বতঃআগ্রহ ক্ষেত্রের সাথে একটি টেবিলটিতে ম্যানুয়ালি একটি সারি যুক্ত করেছে (উদাহরণস্বরূপ, একটি ওআরএমের মাধ্যমে), তবে এই সমাধানটি সম্ভবত তারা প্রত্যাশা করে না।
কিবিবু

1
TABLEশব্দ অপ্রয়োজনীয়। TRUNCATE someTable RESTART IDENTITY;যথেষ্ট।
ব্যবহারকারী 1

কোনও ধারণা কীভাবে আমি ক্যাসকেড দিয়ে এটি করব?
আহসান

2
@ আইহমসান আপনি চেষ্টা করেছেন TRUNCATE someTable RESTART IDENTITY CASCADE;?
বেদরান

55

ক্রম কাউন্টার সেট করতে:

setval('product_id_seq', 1453);

যদি আপনি না জানেন তবে ক্রমের নামটি pg_get_serial_sequenceফাংশনটি ব্যবহার করুন :

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

পরামিতিগুলি হ'ল টেবিলের নাম এবং কলামের নাম।

অথবা শুধু একটি ইস্যু \d productpsqlপ্রম্পট:

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    | 

14

- ক্রমটির শুরু মান পরিবর্তন করুন Change

ALTER SEQUENCE project_id_seq RESTART 3000;

একই তবে গতিশীল:

SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));

আমি একমত যে একটি নির্বাচন ব্যবহার বিরক্তিকর সম্মত তবে এটি কাজ করে।

উত্স: https://kylewbanks.com/blog/Adding-or-Modifing-a- পোষ্টগ্রিএসকিউএল- সিকোয়েন্স- অটো- ইনসিঙ্কমেন্ট


যদি আমি ভুল না হয়ে থাকি, পিজি শেষের মূল্য দিয়ে তাদের ক্রমগুলি উপস্থাপন করে এবং শেষ হয়েছে (1, মিথ্যা) থেকে শুরু হবে, তারপরে (1, সত্য), (2, সত্য) ... সুতরাং MAX (id) + 1 ম্যাক্স হওয়া উচিত (আইডি) পরিবর্তে কোনও আইডি এড়িয়ে যাবেন না।
দশ

এটি কাজ করার জন্য আমাকে আমার পোস্টগ্রাগুলি পুনরায় চালু করতে হয়েছিল। brew services restart postgresql
বিগআরন

নির্বাচন করুন SETVAL ('প্রজেক্ট_আইডি_সেক', (সलेक्ट ম্যাক্স (আইডি) + 1 থেকে প্রজেক্ট)); নিখুঁতভাবে কাজ করে তবে 0 ইনক্রিমেন্ট মানটি পুনরায় সেট করার কোনও উপায় আছে? সুতরাং নতুন এন্ট্রি 0 সূচক দিয়ে শুরু হবে?
চরিত জয়সঙ্কা

13

দর্শকের সুবিধার জন্য মন্তব্য থেকে রূপান্তরিত

সঠিক বাক্য গঠন কী তা এই বার্তাটি থেকে পরিষ্কার নয়। এইটা:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

6

আপনি যদি জিইউআই থেকে স্বয়ংক্রিয় বৃদ্ধি পুনরায় সেট করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন।

  1. আপনার ডাটাবেসে যান
  2. পাবলিক ক্লিক করুন
  3. সারণী তালিকা পাতায় আপনি 'টেবিল', 'ভিউ', 'সিকোয়েন্সস' এর মতো ট্যাব দেখতে পারেন ।
  4. সিকোয়েন্সগুলিতে ক্লিক করুন
  5. আপনি যখন 'সিকোয়েন্সস' এ ক্লিক করেন আপনি সমস্ত সিকোয়েন্স তালিকা দেখতে পাবেন, আপনি যেটি পুনরায় সেট করতে চান তার উপর ক্লিক করুন
  6. এর পরে আপনি একাধিক পছন্দ দেখতে পাবেন যেমন 'অলটার', 'সেট মান', 'পুনরায় চালু করুন', 'রিসেট' ইত্যাদি ...
  7. তারপরে রিসেটে ক্লিক করুন , তারপরে একটি নতুন সারি যুক্ত করুন।

6

আপনার যদি একটি পরিচয় কলাম সহ একটি টেবিল থাকে যা আপনি পরবর্তী মানটি পুনরায় সেট করতে চান আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;

1
এক + ব্যবহারের জন্য যদি না থাকে sequenceবা আপনি টেবিলটি কেটে ফেলতে পারবেন না। আমি মনে করি এটির সেরা উত্তর
এবিএস

5

স্বতঃবৃদ্ধি পুনরায় সেট করতে আপনাকে নীচের ক্যোয়ারী ব্যবহার করে নিজের ক্রমের নামটি পেতে হবে।

বাক্য গঠন:

SELECT pg_get_serial_sequence(‘tablename’,  columnname‘);

উদাহরণ:

SELECT pg_get_serial_sequence('demo', 'autoid');

ক্যোয়ারী অটোইডের ক্রম নামটি "ডেমো_আউটয়েড_সেক" হিসাবে ফেরত দেবে

বাক্য গঠন:

ALTER SEQUENCE sequenceName RESTART WITH value;

উদাহরণ:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;

3

সিকোয়েন্স আইডি ব্যবহার পেতে

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

এটি আপনাকে টেবিলের নাম_কলামনাম_সেক হিসাবে পৃথকীকরণের আইডি দেবে

সর্বশেষ বীজ নম্বর ব্যবহার করতে

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

অথবা আপনি যদি সিক্যুয়েন্স আইডিটি জানেন তবে এটি ইতিমধ্যে সরাসরি ব্যবহার করুন।

select currval(tableName_ColumnName_seq);

এটি আপনাকে সর্বশেষ বীজের নম্বর দেবে

বীজ সংখ্যা ব্যবহার পুনরায় সেট করতে

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45

1

স্কিমা এবং সারণী সহ সিকোয়েন্স কী কী তা পরীক্ষা করতে এই কোয়েরিটি ব্যবহার করুন ,

SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"

এই কোয়েরিটি ব্যবহার করে একের পর এক বৃদ্ধির মান বৃদ্ধি করুন,

SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110

সারণীতে প্রবেশ করার সময় পরবর্তী বর্ধিত মানটি কী (111) হিসাবে ব্যবহৃত হবে।

বর্ধিত মান হিসাবে নির্দিষ্ট মান সেট করতে এই ক্যোয়ারীটি ব্যবহার করুন

SELECT setval('"SchemaName"."SequenceKey"', 120);

সারণীতে প্রবেশের সময় পরবর্তী বর্ধিত মানটি কী (121) হিসাবে ব্যবহৃত হবে।


0

দ্রষ্টব্য যে আপনার যদি '_' দিয়ে সারণির নাম থাকে তবে এটি ক্রমের নামে মুছে ফেলা হবে।

উদাহরণস্বরূপ, সারণির নাম: ব্যবহারকারী_ টোকেন কলাম: আইডি সিকোয়েন্সের নাম: ইউজার টোকেন_আইডি_সেক

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