Я не уверен насчет PostgreSQL, но если он поддерживает автоинкремент, как это делают большинство систем, тогда просто оставьте поле первичного ключа пустым. Однако это означает, что вам нужно указать имена столбцов.
Кроме того, когда вы говорите клон, это звучит так, как будто вы хотите получить копию своей записи, но в вашем описании столбцы address1 и address2 находятся в одной строке данных.
Если вы хотите скопировать свой адрес1 в столбец адреса2, вы можете использовать простое заявление об обновлении.
Если вы пытаетесь клонировать всю строку, чтобы получить две одинаковые записи, вы можете использовать что-то подобное, и это должно работать в обеих средах.
INSERT INTO Addresses
( address1, address2 )
SELECT address1, address2
FROM Addresses
WHERE addressId = ID
Теперь следующий вопрос: клонируете ли вы из одного типа БД в другой? Если это так, то вам все равно нужно будет вставить его в ваше приложение. Если да, то почему бы вам не использовать что-то вроде nHibernate, чтобы абстрагировать слой db от вас.
Если цель состоит в том, чтобы просто сделать копию, то вы можете сделать это прямо в БД с помощью sql выше.
Хотя этот sql, вероятно, самый простой (и вы можете отразить его в БД, если это необходимо, используя системные / основные таблицы), вам все равно нужно будет указать имена столбцов. Основная причина заключается в том, что, как только вы добавите подстановочный знак *, он все равно попытается включить ваш исходный столбец первичного ключа в список выбора, который будет иметь еще 1 дополнительный столбец к тому, что у вас есть.
Другая проблема, о которой следует помнить при использовании подстановочных знаков в операторах вставки, заключается в том, что ваш столбец упорядочивает ДОЛЖЕН СОВПАДАТЬ в противном случае вы получите очень неожиданные результаты.