sql >> データベース >  >> RDS >> PostgreSQL

Postgresのテーブルのレコードごとに一意の文字列を生成するにはどうすればよいですか?

    以下が効率的であるとは言いませんが、これは私たちが過去にこの種のことを行った方法です。

    CREATE FUNCTION make_uid() RETURNS text AS $$
    DECLARE
        new_uid text;
        done bool;
    BEGIN
        done := false;
        WHILE NOT done LOOP
            new_uid := md5(''||now()::text||random()::text);
            done := NOT exists(SELECT 1 FROM my_table WHERE uid=new_uid);
        END LOOP;
        RETURN new_uid;
    END;
    $$ LANGUAGE PLPGSQL VOLATILE;
    

    make_uid() my_tableの列のデフォルトとして使用できます 。次のようなもの:

    ALTER TABLE my_table ADD COLUMN uid text NOT NULL DEFAULT make_uid();
    

    md5(''||now()::text||random()::text) 好みに合わせて調整できます。 encode(...,'base64')を検討できます base-64で使用されている一部の文字がURLに対応していないことを除いて。



    1. SQL Server(T-SQL)でサーバーの現在のタイムゾーンを取得する

    2. MySQLとPDO

    3. postgreSQLで既存のテーブルのcreatetablesqlステートメントを生成する方法

    4. Django + Python 3+PostgreSQLをAWSElasticBeanstalkにデプロイする