sql >> Databáze >  >> RDS >> PostgreSQL

Vytvoření sekvence na existující tabulce

Při přidávání nového sloupce nastavte výchozí hodnotu:

create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');

Změna výchozí hodnoty pro existující sloupce nezmění existující data, protože databáze nemá žádný způsob, jak zjistit, které hodnoty by se měly změnit; u hodnot sloupců není žádný příznak „tento sloupec má výchozí hodnotu“, existuje pouze výchozí hodnota (původně NULL, protože jste nezadali nic jiného) a aktuální hodnota (také NULL), ale způsob, jak zjistit rozdíl mezi „NULL protože je výchozí" a "NULL, protože byla explicitně nastavena na NULL". Takže, když to uděláte ve dvou krocích:

  1. Přidat sloupec.
  2. Změňte výchozí hodnotu.

PostgreSQL nepoužije výchozí hodnotu na sloupec, který jste právě přidali. Pokud však přidáte sloupec a zároveň dodáte výchozí hodnotu, PostgreSQL ví, které řádky mají výchozí hodnotu (všechny), takže může dodávat hodnoty při přidávání sloupce.

Mimochodem, pravděpodobně budete chtít v tomto sloupci také NOT NULL:

create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');

A jako a_horse_with_no_name poznámky, pokud máte v úmyslu použít pouze rid_seq pro váš test.rid pak možná budete chtít nastavit jeho sloupec vlastníka na test.rid takže sekvence bude zrušena, pokud je sloupec odstraněn:

alter sequence rid_seq owned by test.rid;


  1. Připojení k Aurora MySQL Serverless pomocí Node

  2. Přejmenujte tabulku v MySQL

  3. Upozornění:mysqli_connect():(HY000/2002):Žádný takový soubor nebo adresář

  4. PHP PDO a MySQLi