2016-06-25 7 views
0

私はalter tableを実行して、列に列を割り当てようとしていますnextval自動インクリメントではありますが、この最後の部分。シーケンスは正常に作成され、所有者はすべて割り当てられ、table_a.idtable_a_id_seqの所有者です。私はすでにtable_a_id_seqを作成しました。postgresで変数とテーブル名を使ってexecute alterを適切にフォーマットする

postgresのsql関数では、これを正しくフォーマットするにはどうすればよいですか。

私が試してみた:

EXECUTE format('ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval($1::regclass)', new_table_name) USING new_seq_name; 

をしかし、それは$ 1はnew_table_seq_nameを指していないことを言います。

EXECUTE format('ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval("%s"::regclass)', new_table_name, new_seq_name); 

をしかし、それはこの文で区切られたトランザクションの後ろにする必要がある場合は私が思ってしまうどのシーケンスが存在しないと言われます: は、私も試してみました。

new_table_nameでこの変更を正常に実行するにはどうすればよいですか?助けてくれてありがとう!

+0

'sequence_schemaを選択し、SEQUENCE_NAME;'あなたはちょうどあなたがスキーマおよび配列を定義していることを確認してくださいだろう名前は?? –

+0

** [DEMO](http://sqlfiddle.com/#!15/a1e04/1/2)**のようにsthを達成しますか? – lad2025

+0

'nextval( '" myschema ".foo')'構文を使用していることを確認するだけです(検索パスにスキーマがない場合) –

答えて

0

リテラルのための使用the format specifier %L:sequence_schema = 'yourschema' とSEQUENCE_NAME = 'new_seq_name' のinformation_schema.sequencesから

EXECUTE format(
    'ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval(%L::regclass)', 
    new_table_name, 
    new_seq_name); 
関連する問題