一部の列にデフォルト値を指定したテーブルがあります。null値を列のデフォルト値に変更した後、テーブルにレコードを挿入する列に対応する引数を持つ関数を作成したいのですが、どの引数がnullであるかに基づいてプログラムでクエリを作成したくありません。本質的に私は次のようなものが欲しいです
INSERT into Table (c1, c2, c3, c4)
Values (coalesce(somevar, DEFAULT(c1)), ...)
これは可能ですか?私はmysqlがこれを行うことができるのを見てきました。postgresは同様のものを提供しますか?バージョン9.1を使用しています
更新:この質問はいくつかの興味深い解決策を提供しますが、残念ながら結果は常にテキストです。挿入に使用できるように、デフォルト値を実際のデータ型として取得したいと思います。デフォルト値をテキストからそのデータ型(テキストとして提供される)にキャストする解決策を見つけようとしましたが、方法が見つかりません:
SELECT column_name, column_default, data_type
FROM information_schema.columns
WHERE (table_schema, table_name) = ('public', 'mytable')
AND column_name = 'mycolumn'
ORDER BY ordinal_position;
上記はcolumn_defaultとdata_typeをテキストとして返すので、column_defaultをdata_typeの値にキャストするにはどうすればよいですか?私がこれを行うことができれば、私の問題は解決されるでしょう。